是否有比使用Await更好的方法来使用CountUpDownLatch?

时间:2018-10-03 16:02:18

标签: java multithreading java-threads

我正在使用向上/向下计数锁存器以将程序限制为6个线程,但它确实可以正常运行,但我真正想要的是始终有6个线程在运行。这样一来,一个线程死亡时,另一个线程就会启动。在下面的实现中,无论何时超时,它一次只能创建6个新线程。

关于如何构建循环以完成此操作的任何建议?

int numThreads = 6;

CountUpDownLatch threadCounter = new CountUpDownLatch();

for(int t = 1; t <= numThreads; t++) {
    while(list.hasNext()) {

    new Thread(new ThreadController("processData",list.next())).start();

    threadCounter.countUp();
    }
    try {
        threadCounter.await(5, TimeUnit.MINUTES);
    } catch (InterruptedException e) { e.printStackTrace(); }
}

1 个答案:

答案 0 :(得分:1)

使用包含6个线程的执行程序服务,

ExecutorService exec = Executors.newFixedThreadPool(6);
for (int i = 0; i < 10; i++) {
    exec.submit(() -> System.out.println("Hello"));
}
exec.shutdown();

您可以将RunnableCallable传递给submit的{​​{1}}方法。在这里,我传递了一个lambda函数作为ExecutorService,该函数从Java8开始有效。在您的情况下,您可以这样做,

Runnable