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です。