Zielony Smok - logo witryny

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