我多年来一直有的问题:在这个伪代码中,
ExecutorService svc = Executors.newFixedThreadPool(3);
svc.submit(new Runnable() { /* code A */ });
svc.shutdown();
if(svc.awaitTermination(...)) {
// code B
.awaitTermination()
没有记录为在代码 A 和 B 之间 建立之前发生的事情。有没有理由不这样做?
ExecutorService和并发包javadocs 在任务和提交之前完成的工作之间定义了happens - before,而不是在成功调用之后的执行器任务和代码之间。.awaitTermination()
请注意,我并不是要求对如何重构我的代码以利用记录在案的发生前的关系进行设计批评。我的问题是,在这种情况下,文档没有提到发生之前是否有原因?
(请注意,这不是22665198的副本,尽管标题非常贴切。)