Penso che Timer non sia implementato semplicemente utilizzando il ciclo while a continuo controllando e confrontando l'ora corrente con il punto temporale desiderato.
SI, ESSO. L'unica ottimizzazione è; sta usando la coda di priorità basata su nextExecutionTime per le attività.
JavaDoc stati
oggetto Timer è un singolo thread in background che viene utilizzato per eseguire tutte dei compiti del timer, in modo sequenziale. Le attività del timer devono completare rapidamente. Se un'attività del timer impiega troppo tempo per essere completata, "manda" il thread di esecuzione del task del timer. Questo può, a sua volta, ritardare l'esecuzione dei compiti successivi
classe Timer contiene
TaskQueue
che è una coda di priorità di TimerTasks ordinato il nextExecutionTime.
TimerThread(queue)
thread di esecuzione del task del timer, che attende (queue.wait()
) per le attività sulla coda del timer.
TimerThread
ha private void mainLoop() {
dove continua while(true)
continuerà a verificare le attività confrontando nextExecutionTime
con currentTimeMillis
currentTime = System.currentTimeMillis();
executionTime = task.nextExecutionTime;
if (taskFired = (executionTime<=currentTime)) {
e se raggiunge quindi chiamando
if (taskFired) // Task fired; run it, holding no locks
task.run();
fonte
2014-06-20 18:49:07
1. Andare al [fonte OpenJDK repo] (http://hg.openjdk.java.net/); 2. Cerca la risposta; 3. ???; 4. Profitto. – TC1
Profitto? Cosa significa? – user1914692
È un riferimento a questo: http://www.youtube.com/watch?v=tO5sxLapAts –