use*_*121 1 java multithreading executorservice countdownlatch
我有两个线程t1和t2.他们两个都进行了一些计算,我试着阻止主线程直到t1和t2完成.我使用.awaitTermination()如下所示,但问题是,despit它是一个if语句,.awaitTermination()进入无限循环.
请帮助我找到正在发生的事情.我应该在不知道t1和t2需要完成的确切时间的情况下指定一段时间吗?
executor.execute(new RunnableClass(bgr,3))
executor.execute(new RunnableClass(bgr,7))
executor.shutdown();
if (executor.awaitTermination(3, TimeUnit.SECONDS)) {
print("terminated")
}
Run Code Online (Sandbox Code Playgroud)
如果您使用Java 8,则可以使用CompletableFuture<T>.他们定义了一些有用的方法,比如join等待执行并将它们链接在一起.您的示例如下所示:
final CompletableFuture<Void> future1 = CompletableFuture.runAsync(new RunnableClass(bgr, 3), executor);
final CompletableFuture<Void> future2 = CompletableFuture.runAsync(new RunnableClass(bgr, 7), executor);
CompletableFuture.allOf(future1, future2).join(); // blocks until both finished
executor.shutdown();
Run Code Online (Sandbox Code Playgroud)
一个伟大的介绍,可以发现在这里.
| 归档时间: |
|
| 查看次数: |
173 次 |
| 最近记录: |