tar*_*sbl 10 java concurrency executorservice memory-barriers happens-before
问题我已经多年了:在这个伪代码中,
ExecutorService svc = Executors.newFixedThreadPool(3);
svc.submit(new Runnable() { /* code A */ });
svc.shutdown();
if(svc.awaitTermination(...)) {
// code B
Run Code Online (Sandbox Code Playgroud)
.awaitTermination()没有记录在代码A和B之间发生的事情. 有没有理由不是?
该ExecutorService的和concurrent包的javadoc定义的之前发生完成的任务和工作之间之前,他们已提交,但不执行的任务和代码之间的成功后.awaitTermination()调用.
注意,我不是要求设计批评如何重构我的代码以利用记录的事先关系.我的问题是,在这种情况下,有没有理由说文档没有提及?
(请注意,尽管标题非常贴切,但这并不是22665198的重复.)
ExecutionService, 你确定吗?你的意思ExecutorService?另外,不存在ExecutorService.awaitTermination()没有参数的方法。该ExecutorService.awaitTermination(long, TimeUnit)方法接收等待超时的时间量。显然,如果它因为超时而返回,它不能保证发生之前的关系,因此它不能在其合同中宣传此保证,因为它并不适用于所有情况。
| 归档时间: |
|
| 查看次数: |
271 次 |
| 最近记录: |