1

フューチャーがキャンセルされたときに、Callableでfinallyブロックが実行される前に、future.get呼び出しが返される場合に断続的に失敗するテストがあります。基本的なワークフローは次のとおりです。

future.cancel(true);

私はInterrupedException投げられたのを見るCallable

メインスレッドは呼び出しCancellationExceptionからキャッチしますfuture.get

Callable呼び出しfinally

テストは私のノートブックでは常に成功し、ビルドサーバーではほとんどの場合失敗します。私のノートブックとビルドサーバーの両方がOpenJDK1.7を実行しています。何か案は?

4

1 に答える 1

0

のドキュメントはcancel()、中断されたスレッドが終了するのを待つことを指定していないようです。その保証が必要な場合は、モニターまたはその他の同期メカニズムをセットアップする必要があります。これにより、キャンセラーはプロセッサが「最終ブロックを完了しました」と言うのを待つことができます。

于 2011-09-27T17:17:47.500 に答える