Klasa java.util.concurrent.TimeUnit
Wyliczenie wyliczające różne okresy trwania. Pozwala na lepsze kontrolowanie czasu trwania, szczególnie przy
operacjach na wątkach i w operacjach współbieżnych.
Oprócz tego klasa zawiera metody pozwalające na przeliczenia jednostek między sobą.
Klasa obejmuje stałe: DAYS, HOURS, MINUTES, SECONDS, MILLISECONDS, MICROSECONDS i NANOSECONDS, gdzie milisekunda to 1/1000 sekundy, mikrosekunda to 1/1000 milisekundy (1/1 000 000 sekundy), a nanosekunda to 1/1000 mikrosekundy (1/1000 000 000 sekundy).
Tworzymy prostą klasę wątku używającego klasy CountDownLatch
:
package dt15.java_util_concurrent_timeunit; import java.util.concurrent.*; class MyThread implements Runnable { private final CountDownLatch cdl; public MyThread(CountDownLatch cdl) { this.cdl = cdl; new Thread(this).start(); } @Override public void run() { System.out.println(cdl.getCount()); cdl.countDown(); } }
Tworzymy klasę odliczającą od 5 do 1. Po wydrukowaniu na konsoli kolejnej liczby wykonywanie jest wstrzymywane na
1 sekundę await(1, TimeUnit.SECONDS)
:
package dt15.java_util_concurrent_timeunit; import java.util.concurrent.*; class Listing093 { private final CountDownLatch cdl; private int num; private Listing093() { this.num = 5; cdl = new CountDownLatch(5); System.out.println("Start!"); makeThreads(); System.out.println("Gotowe"); } private void makeThreads() { for (int i = 0; i < num; i++) { new MyThread(cdl); try { cdl.await(1, TimeUnit.SECONDS); } catch (InterruptedException e) { e.printStackTrace(); } } } public static void main(String[] args) { new Listing093(); } }
Po uruchomieniu widzimy na konsoli pojawiające się kolejno:
Start! 5 4 3 2 1 Gotowe