私はIO操作が多いためにハングしているスレッドをkillしようとしています。 私はthread.destroy
かthread.stop
を試してみましたでしたが、彼らは例えば を推奨されていませんがコードの下でどのようにJavaでハングスレッドを殺す
public class ThreadCheck {
private static int cnt = 0;
public static void main(String args[]) throws InterruptedException, ExecutionException {
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("Running tasks");
while (condition) {
// **** Some IO operation that take forever ****
System.out.println("iteration " + cnt++);
if (Thread.currentThread().isInterrupted()) {
System.out.println("Breaking loop");
return;
}
}
}
});
t1.start();
TimeUnit.SECONDS.sleep(5);
t1.interrupt();
System.out.println("thread destroyed..");
}
}
問題は、私はinterrupt
コールを追加した表情をされているが、それはIOの呼び出しを終了したことがないので、私はそのようにスレッドを殺すことができますケース
正確なIO操作によって異なります。例えば、 'InterrptibleChannel'を使うようにコードを変更することができれば、必要なものを達成することができます。とにかく、IO操作は、これが解決可能であるために不可欠です。 – RealSkeptic
うん、彼は何を言ったか^^ ^^! –
@RealSkeptic私はいくつかのCSVファイルを読み込み、それらのデータをデータベースに挿入していますが、これらのCSVファイルが壊れてIOコールが終了しないことがあります。この場合、Javaはunix killコマンドのようにスレッドをkillできます。 – Nomad