有没有比 Await 更好的方法来使用 CountUpDownLatch?
Is there a better way to use a CountUpDownLatch than Await?
我正在使用计数 up/down 锁存器来将程序限制为 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(); }
}
像这样使用包含 6 个线程的执行程序服务,
ExecutorService exec = Executors.newFixedThreadPool(6);
for (int i = 0; i < 10; i++) {
exec.submit(() -> System.out.println("Hello"));
}
exec.shutdown();
您可以将 Runnable
或 Callable
传递给 ExecutorService
的 submit
方法。在这里,我将 lambda 函数作为 Runnable
传递,它从 Java8 开始有效。在你的情况下,你可以这样做,
exec.submit(new ThreadController("processData",list.next()));
我正在使用计数 up/down 锁存器来将程序限制为 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(); }
}
像这样使用包含 6 个线程的执行程序服务,
ExecutorService exec = Executors.newFixedThreadPool(6);
for (int i = 0; i < 10; i++) {
exec.submit(() -> System.out.println("Hello"));
}
exec.shutdown();
您可以将 Runnable
或 Callable
传递给 ExecutorService
的 submit
方法。在这里,我将 lambda 函数作为 Runnable
传递,它从 Java8 开始有效。在你的情况下,你可以这样做,
exec.submit(new ThreadController("processData",list.next()));