runnable実装とオーバーライドによってマルチスレッドを実装しましrun()た。スレッドを内部で中断したいrun()。
私を助けてください
で何をすればいいvoid run(){ }ですか?
runnable実装とオーバーライドによってマルチスレッドを実装しましrun()た。スレッドを内部で中断したいrun()。
私を助けてください
で何をすればいいvoid run(){ }ですか?
詳細が分からないとなんとも言えません。ただし、選択肢は次のとおりです。
Thread.sleep()-そして無条件にしばらく眠る
wait/notifyいくつかのオブジェクトを待つためのペア
のようなデータ構造をブロックBlockingQueueし、コレクションに何かが現れたときにスレッドを起動します
Thread.join()別のスレッドで待機する
Semaphore、CountDownLatch、CyclicBarrierおよび他の多くのJava 5 同時実行抽象化
waitこれを行う通常の方法は、別のスレッドが通知できるオブジェクトを呼び出すことです。これはあなたのコードのパターンです:
public void run() {
. . .
// decide to suspend thread execution:
synchronized (LOCK) {
try {
LOCK.wait();
} catch (InterruptedException e) {
// thread was interrupted -- time to return?
}
}
// execution resumes here after interrupt or notify
}
次に、他のスレッドが次のコードを実行します。
synchronized (LOCK) {
LOCK.notify(); // or notifyAll();
}
これらのコード フラグメントにLOCKは、両方のコードからアクセスできるオブジェクトがあります。ジョブを実行するために利用可能なオブジェクトを使用することが理にかなっている場合、別のオブジェクトは必要ありません。
おそらく必要ですがObject.wait()、Object.notifyAll()適切に使用するのは難しいことです。それを読んでください。良い情報源は、JoshBlochによるEffectiveJavaです。