Есть ли способ, которым несколько потоков могут печатать текущее время (время в миллисекундах) одинаково? - PullRequest
1 голос
/ 09 апреля 2020

Используя Executor Service, мне нужно запустить 10 потоков. И каждый из этих потоков должен печатать текущее время в миллисекундах, и мне нужно убедиться, что все эти потоки всегда печатают одно и то же время. Я пытался использовать CyclicBarrier, но он не работает.

Возможно ли это сделать?

1 Ответ

2 голосов
/ 09 апреля 2020

Вы можете использовать CountDownLatch для достижения того, что вы пытаетесь;

import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class TestApp {
    private static final int THREAD_COUNT = 10;

    public static void main(String... args) throws Exception {
        ExecutorService executorService = Executors.newFixedThreadPool(THREAD_COUNT);
        final CountDownLatch countDownLatch = new CountDownLatch(THREAD_COUNT);
        for(int i=0;i<THREAD_COUNT;i++) {
            executorService.execute(() -> {
                countDownLatch.countDown();
                try {
                    countDownLatch.await();
                    System.out.println(Thread.currentThread().getName() + " - " + System.currentTimeMillis());
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            });
        }

    }
}

Результат

pool-1-thread-5 - 1586432194060
pool-1-thread-8 - 1586432194060
pool-1-thread-4 - 1586432194060
pool-1-thread-6 - 1586432194060
pool-1-thread-1 - 1586432194060
pool-1-thread-2 - 1586432194060
pool-1-thread-9 - 1586432194060
pool-1-thread-3 - 1586432194060
pool-1-thread-7 - 1586432194060
pool-1-thread-10 - 1586432194060
...