10

私が何年も持っていた質問: この疑似コードでは、

ExecutorService svc = Executors.newFixedThreadPool(3);
svc.submit(new Runnable() { /* code A */ });
svc.shutdown();
if(svc.awaitTermination(...)) {
    // code B

.awaitTermination()コードAとBの間 で事前発生を確立すると文書化されていません。そうでない理由はありますか?

ExecutorService並行パッケージの javadoc は、タスクとサブミットされる前に実行された作業との間で発生する前に定義しますが、呼び出しが成功した後のエグゼキュータータスクとコードの間では定義しません。.awaitTermination()

文書化された事前発生関係を活用するためにコードを再構築する方法について、設計上の批評を求めているわけではないことに注意してください。ここでの私の質問は、この状況でドキュメントが事前発生について言及していない理由はありますか?

(非常に適切なタイトルにもかかわらず、これは22665198の複製ではないことに注意してください。)

4

2 に答える 2

2

ExecutionService、 本気ですか?ということExecutorServiceですか?ExecutorService.awaitTermination()また、パラメータのないメソッドはありません。このExecutorService.awaitTermination(long, TimeUnit)メソッドは、タイムアウトまで待機する時間を受け取ります。明らかに、タイムアウトのために返された場合、事前発生関係を保証することはできません。したがって、すべての場合に存在するわけではないため、この保証をコントラクトで宣伝することはできません。

于 2015-06-02T20:03:27.397 に答える