2017-06-07 7 views
0

私は、スケジュールで実行され、RFC呼び出しを介して外部ソースからいくつかのデータをフェッチします。 RFCコールはスレッド化され、60秒後にキャンセルされます。これは私がそれを行う方法です。私は、外部RFCコールが立ち往生になったとfuture.cancel(真)は、スレッドの実行を中断することができませんでした状況、accross来るまでJava - TimeoutExceptionの後のスレッドの適切なキャンセルの実行

Future<String> future = executor.submit(new MyCallable()); 
try { 
    future.get(60, TimeUnit.SECONDS); 
} catch (TimeoutException e) { 
    future.cancel(true); 
} 

これは長い時間のために働いていました。私のJavaプログラムは決して終了せず、外部システム内の対応するプロセスを手動でキャンセルするまで実行を続けました。

私の質問は今、どん​​な状況でコードを終了させることができますか?私はスレッドを停止することは価値が下がることに気付きました。

これはいいですか?

try { 
    future.get(60, TimeUnit.SECONDS); 
} catch (TimeoutException e) { 
    future.cancel(true); 
    if(!future.isDone()){ 
     System.exit(1); 
    } 
} 

ありがとうございました。

乾杯、Jooo

答えて

0

私は、実行時に例外:InterruptedException実装されていない場合だけ、スレッドを殺すために、Javaの方法はありませんと信じています。スレッドが実行中の場合は、フラグを設定するだけでスレッドに通知します。スレッドが待機中またはスリープ中の場合、InterruptedExceptionがスローされます。実行するのに長い時間がかかることが

もちろん、すべての行の後にチェックする必要はありませんが、方法が適切に割り込み

は、スレッドが実行されているプロセスを強制終了処理を担当しています。 (たとえば、System.exit(int)を呼び出します)

関連する問題