マルチスレッド プログラムをデバッグしようとすると、新しい問題が発生します。以下に、私の問題を示すテスト プログラムを含めました。基本的に、スレッドの start() メソッドの呼び出しとそのスレッドの run() メソッドにブレークポイントを設定すると、デバッガーで「続行」すれば問題ありません。ただし、ステップ オーバーすると、start()、println()、および join() の呼び出しをステップ オーバーできます。その後、プログラムは実行が終了するのを待ちますが、それは決して起こりません。スレッドが実行されていないようで、スレッドの run() のブレークポイントがトリップすることはありません。プログラムをやめなければなりません。
run() にブレークポイントがない場合、続行するかステップするかは問題ではありません。スレッドが実行されます。ここで何が欠けていますか?
バニラ Eclipse デバッグを使用していることに注意してください。
public class Test {
public static void main(String[] args) {
try {
Thread myThread = new Test().new TestThread();
long threadStartTime = System.currentTimeMillis();
myThread.start(); // **********Breakpoint 1
System.out.println("Thread started");
myThread.join();
long threadExecutionTime = System.currentTimeMillis() - threadStartTime;
System.out.println("Thread finished execution in " + threadExecutionTime + " milliseconds.");
} catch(InterruptedException e) {
System.err.println(e.getMessage());
}
}
private class TestThread extends Thread {
@Override
public void run() { // **********Breakpoint 2
try {
sleep(5*1000);
} catch(InterruptedException e) {
System.err.println(e.getMessage());
}
}
}
}