私は2つのスレッドを構築しようとしています。スレッドAはメインスレッド、スレッドBは2番目のスレッド、スレッドBは時間のかかる関数を介して変数を更新しています(最終的にスレッドAは使用する必要があるため、この変数は両方のスレッド間で共有する必要があります)その変数も同様です)が、スレッドBの完了に時間がかかりすぎる場合(例外を使用)、スレッドAがスレッドBを終了するようにします。
私が試したのは次のとおりです。
Thread thread = new Thread() {
public void run() {
/// run something that could take a long time
}
};
synchronized (thread) {
thread.start();
}
System.err.println("Waiting for thread and terminating it if it did not stop.");
try {
thread.wait(10000);
} catch (InterruptedException e) {
System.err.println("interrupted.");
}
それが10秒以上実行された場合に動作を終了するという期待される動作を与える必要がありますか?スレッドを実行するメソッドが戻るため、スレッドオブジェクトは待機後に削除されます。
現在、このコードで何が起こるかというと、wait(10000)コマンドで常にjava.lang.IllegalMonitorStateExceptionが発生します。