1

バックグラウンドで作業しているスレッドがありますが、常にやるべきことがあるとは限りません。メインスレッドからデータが渡されるのを待ってから、作業を続けたいと思います。

wait()最初はそれが目的だと思ってnotify()いましたが、逆にうまくいくようです。

それ、どうやったら出来るの?

4

2 に答える 2

6

私のコメントを参照してください。

これは、生産者と消費者の問題の非常に一般的なBlockingQueue要件です。車輪を再発明しないようにしてください;-)

複数の実装が存在しますBlockingQueue。たとえば、 bounded ArrayBlockingQueue、 unbounded LinkedBlockingQueue、 hand-off SynchronousQueue、さらにはPriorityBlockingQueue. すべてBlockingDequeの とTransferQueueBlockingQueues です ;-)

于 2012-09-15T17:15:57.537 に答える
6

ExecutorService を使用することをお勧めします。キューとスレッド プールを組み合わせます。

可能な限りバックグラウンドで実行されるタスクをそれに送信し、必要に応じて結果を取得できます。

ExecutorService service = Executors.newWhateverPool();
service.submit(new Runnable() {  your task here });
于 2012-09-15T17:20:19.013 に答える