The whole idea of java.util.Timer is to avoid the overhead of creating a new Thread for every task. So there is only one Thread to handle all the tasks scheduled on a given Timer. That it why it must execute the tasks sequentially even if scheduled at the same time. If you want two tasks to run simultaneously you will need to either spawn a separate task when the trigger happens or use two Timers.
In Java version 1.2 or later, javax.swing.Timer has similar capabilities. Use it only for GUI (Graphic User Interface) activities since the actions tie up the Swing thread, which is what you want for Swing method invocations. You don’t need SwingUtilities. invokeLater with javax.swing.Timer since it automatically dispatches your Runnable on the EDT (Event Dispatch Thread).
In Java version 1.5 or later there is an even more sophisticated timer called java.util.concurrent.ScheduledThreadPoolExecutor.
See the warning under Gotchas:Threads on why a sleeping task waiting for the next timer event may never waken if somebody fiddles with the system clock setting while your thread is asleep.
|
|
You can get the freshest copy of this page from: | or possibly from your local J: drive (Java virtual drive/mindprod.com website mirror) |
| http://mindprod.com/jgloss/timer.html | J:\mindprod\jgloss\timer.html | |
![]() | Please email your feedback for publication,
letters to the editor, errors, omissions, typos, formatting errors, ambiguities, unclear wording,
broken/redirected link reports, suggestions to improve this page or comments to
Roedy Green :
| |
| Canadian Mind Products | ||
| mindprod.com IP:[65.110.21.43] | ||
| view Blog | Your face IP:[38.107.179.214] | |
| Feedback | You are visitor number 50,467. | |