2013-05-18 19 views
7

Artykuły na stronie związane z Timerem mówią o tym, jak używać Timera do programowania.W jaki sposób program Java Timer jest zaimplementowany przez komputer?

Zadaję inne pytanie. W jaki sposób Java wykonuje metodę Timer?

Ponieważ mówi się, że należy unikać czasochłonnej pracy, aby nie używać pętli do sprawdzenia, czy aktualny czas jest wymaganym punktem czasowym, myślę, że Timer nie jest zaimplementowany po prostu za pomocą pętli while do ciągłego sprawdzania i porównywania bieżącego czasu czas do żądanego punktu czasowego.

Dziękujemy!

+2

1. Przejdź do [źródło OpenJDK repo] (http://hg.openjdk.java.net/); 2. Poszukaj odpowiedzi; 3. ???; 4. Zysk. – TC1

+0

Zysk? Co to znaczy? – user1914692

+1

Jest to odniesienie do tego: http://www.youtube.com/watch?v=tO5sxLapAts –

Odpowiedz

1

Według dla javadoc

Ta klasa nie oferuje gwarancji w czasie rzeczywistym: jest harmonogram zadań pomocą Object.wait Sposób (long).

Jeśli spojrzysz w kod, znajdziesz metodę zwaną główną pętlą. Pierwsze dwie linie są kopiowane poniżej.

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

I ... używa pętli while wewnątrz niego wraz z Object.wait() zrobić oczekujące.

+0

Dzięki ... W jaki sposób jest zaimplementowana Object.wait() Wciąż zakładam, że nie używa pętli while – user1914692

+0

'Object.wait()' jest "wbudowaną" metodą, która jest zaimplementowana w natywnym kodzie, nie w Javie korzysta on z bazowych systemów operacyjnych do zawieszenia wykonywania wątku (tak, że program szeregujący OS nie da mu żadnego czasu procesora) –

+0

Dziękuję bardzo !, Tak właśnie myślałem. poszukaj odpowiedzi, a następnie w jaki sposób system operacyjny implementuje ją bez kosztów czasu procesora? Dowolny link, aby znaleźć odniesienie? – user1914692

2

myślę czasowy nie jest realizowany po prostu za pomocą pętli while stale sprawdzania i porównywania aktualnego czasu do pożądanego punktu czasowego.

TAK, TO JEST. Jedyna optymalizacja; używa kolejki priorytetów w oparciu o nextExecutionTime dla zadań.

stany javadoc

czasowy przedmiotem jest pojedynczy wątek tła, który jest używany do wykonać wszystkich zadań Timer, sekwencyjnie. Zadania timera powinny być szybko zakończone. Jeśli wykonanie zadania timera zajmuje zbyt wiele czasu, to "wieje" wątek wykonywania zadań timera. To może z kolei opóźnia wykonanie kolejnych zadań

Klasa Timer zawiera

  1. TaskQueue który jest priorytetem kolejkę TimerTasks, uporządkowaną na nextExecutionTime.
  2. TimerThread(queue) wątek wykonywania zadań timera, który czeka (queue.wait()) na zadania w kolejce zegara.

TimerThread ma private void mainLoop() {
gdzie ciągła while(true) będą zaglądać zadania porównując nextExecutionTime z currentTimeMillis

    currentTime = System.currentTimeMillis(); 
        executionTime = task.nextExecutionTime; 
        if (taskFired = (executionTime<=currentTime)) { 

i jeśli osiągnie następnie wywołanie

  if (taskFired) // Task fired; run it, holding no locks 
       task.run(); 
+0

, jeśli Timer Java używa pętli, a następnie jak dokładny jest zegar? – user1914692

Powiązane problemy