2013-05-18 15 views
7

Gli articoli sul sito relativi a Timer parlano di come utilizzare il timer per programmare.Come viene implementato il timer Java dal computer?

Ho una domanda diversa. In che modo Java esegue il metodo Timer?

Poiché si dice per evitare lunghi lavori da non utilizzare durante ciclo per controllare se l'ora corrente è il punto di tempo desiderato, Credo Timer non è implementato semplicemente utilizzando while al controllo continuo e confrontando la corrente tempo per il punto temporale desiderato.

Grazie!

+2

1. Andare al [fonte OpenJDK repo] (http://hg.openjdk.java.net/); 2. Cerca la risposta; 3. ???; 4. Profitto. – TC1

+0

Profitto? Cosa significa? – user1914692

+1

È un riferimento a questo: http://www.youtube.com/watch?v=tO5sxLapAts –

risposta

1

Secondo per il javadoc

Questa classe non offre garanzie in tempo reale: si pianifica compiti utilizzando il metodo di Object.wait (lunga).

Se si guarda il codice si trova un metodo chiamato ciclo principale. Il primo paio di righe sono copiate di seguito.

private void mainLoop() { 
    while (true) { 
     try { 

E ... Esso utilizza un ciclo while all'interno di esso con Object.wait() a fare l'attesa.

+0

Grazie, quindi, come viene implementato Object.wait()? Suppongo ancora che non usi il ciclo while – user1914692

+0

'Object.wait()' è un metodo "built-in" che è implementato nel codice nativo, non in Java, utilizza le funzionalità del sistema operativo sottostante per sospendere l'esecuzione di un thread (quindi lo scheduler del sistema operativo non gli darà alcun tempo di CPU) –

+0

Grazie mille! Questo è quello che pensavo. cercare la risposta, quindi come funziona il sistema operativo senza costi di CPU? Qualsiasi collegamento in modo da poter trovare un riferimento? – user1914692

2

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

  1. TaskQueue che è una coda di priorità di TimerTasks ordinato il nextExecutionTime.
  2. 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(); 
+0

se Java Timer utilizza il ciclo, quindi quanto accurato è il timer? – user1914692

Problemi correlati