私は以下のような次のコードを持っています:
new Thread(new Test1Runnable()).start(); // Line (a)
public class Test1Runnable implements Runnable {
public void run() {
Test2Runnable task1 = new Test2Runnable();
ExecutorService executor = Executors.newSingleThreadExecutor();
try {
executor.submit(task1);
while(true) {
if(task1.isDone()) {
break;
}
// Thread.sleep(2000); // Line (b)
}
if(!task1.hasError()) { // Line (c)
executor.submit(new Test3Runnable());
}
} catch(Exception ex) {
if(executor != null) {
executor.shutdown();
}
}
}
}
public class Test2Runnable implements Runnable {
private Exception error;
private boolean done;
public void run() {
reset();
doRun();
done = true;
}
protected void doRun() {
try{
// ...
// ....
} catch(Exception ex) {
}
}
private void reset() {
error = null;
done = false;
}
public boolean isDone() {
return done;
}
public boolean hasError() {
return getError() != null || getNonSuccess() > 0;
}
public Exception getError() {
return error;
}
}
行 (a) で Test1Runnable を実行し、行 (b) をコメントすると、スレッドがハングして行 (c) まで実行されない場合に問題が発生します。行 (b) のコメントを外すか、行 (c) にブレークポイントを追加してリモート デバッグを有効にすると、スレッドは通常どおり最後まで実行され続けます。誰でもこれについてアドバイスをもらえますか?スレッドが実行を継続しないのはなぜですか? すべてのスレッドは例外なく実行されます。