バックグラウンドで作業しているスレッドがありますが、常にやるべきことがあるとは限りません。メインスレッドからデータが渡されるのを待ってから、作業を続けたいと思います。
wait()
最初はそれが目的だと思ってnotify()
いましたが、逆にうまくいくようです。
それ、どうやったら出来るの?
バックグラウンドで作業しているスレッドがありますが、常にやるべきことがあるとは限りません。メインスレッドからデータが渡されるのを待ってから、作業を続けたいと思います。
wait()
最初はそれが目的だと思ってnotify()
いましたが、逆にうまくいくようです。
それ、どうやったら出来るの?
私のコメントを参照してください。
これは、生産者と消費者の問題の非常に一般的な
BlockingQueue
要件です。車輪を再発明しないようにしてください;-)
複数の実装が存在しますBlockingQueue
。たとえば、 bounded ArrayBlockingQueue
、 unbounded LinkedBlockingQueue
、 hand-off SynchronousQueue
、さらにはPriorityBlockingQueue
. すべてBlockingDeque
の とTransferQueue
もBlockingQueue
s です ;-)
ExecutorService を使用することをお勧めします。キューとスレッド プールを組み合わせます。
可能な限りバックグラウンドで実行されるタスクをそれに送信し、必要に応じて結果を取得できます。
ExecutorService service = Executors.newWhateverPool();
service.submit(new Runnable() { your task here });