スレッドのタイムアウト

com.nantian.winUtliTest.ThreadTestをパッケージ化。

輸入java.util.HashMapを;
輸入java.util.concurrent.Callable;
輸入java.util.concurrent.ExecutionException。
輸入java.util.concurrent.ExecutorService;
輸入java.util.concurrent.Executors。
輸入java.util.concurrent.Future;
輸入java.util.concurrent.TimeUnit。
輸入java.util.concurrent.TimeoutException。

/ **
*タスクを起動し、待機時間が予め設定されたタイムアウト、アボートを超えた場合、その後、タスクの結果を待ちます。
*
* @Author陳鳳
* /
publicクラスThreadTest {

静的な無効メインパブリック(文字列[] args)を{
//するSystem.out.println( "スタート...");
//
// ExecutorServiceのExecの= Executors.newCachedThreadPool(); //スレッドプールを作成します
//
// testTask(EXEC、15);成功した最終結果の後に//タスクを待ち、15秒ntaskResult待たず:trueにfailReason:ヌル
// TestTask(Execの,. 5); //のみ5秒待って、タスクはそう、終わっていませんタスクはntaskResult終了さ:ヌルfailReason:結果のタイムアウトを待つメインスレッドなので、割り込みタスクスレッドを!
//
// exec.shutdown();
//するSystem.out.println( "終了!");
}

HashMapの静的公開<文字列、文字列> TestTask(ExecutorServiceのExecの、int型のタイムアウト){
MyTaskにまでMyTaskにタスクに新しい新しい// =();
A = sAの新しい新しいA();
今後は、<HashMapの<文字列、文字列>> = exec.submitフューチャー( SA);

のHashMap <文字列、文字列> TaskResult = NULL;
文字列failReason = NULL;
試み{
結果について//待ち時間、最大待機しているタイムアウト秒、タイムアウトアボート二
taskResult = future.get(タイムアウト、TimeUnit.SECONDS) 。
キャッチ}(InterruptedExceptionあるE)は{
failReason =「結果を待っている間、メインスレッドが中断された!」;
}キャッチ(ExecutionException E){
failReason =「メインスレッドの結果を待つが、スローされた計算を!」;
}キャッチ(TimeoutException E){
failReason = "タイムアウトの計算のためのメインスレッド待ち、その割り込みタスクスレッド!";
exec.shutdownNow();
}

System.out.println( "ntaskResult:" + taskResult.get( "isSucc"));
System.out.println( "failReason:" + failReason)。
taskResultを返します。
}
}

//クラスMyTaskに器具呼び出し可能<ブール> {
//
// @Override
//パブリックブール()の呼び出しがスロー例外{
// //总计耗时约10秒
//(INT iは= 0; I <100L; I ++ ){
//のThread.sleep(100)。//睡眠0.1秒
// System.out.print( ' - ')。
//}
//にBoolean.TRUEを返します。
//}
//}

おすすめ

転載: www.cnblogs.com/wzy-525/p/12059531.html