1

我有一个线程在后台工作,但它并不总是有工作要做。我希望它等待主线程传递数据,然后继续工作。

起初我以为这就是目的wait()notify()但似乎反过来。

我怎么做?

4

2 回答 2

6

我的评论

听起来你想要一个BlockingQueue- 这是生产者 - 消费者问题的一个非常常见的要求。尽量不要重新发明轮子;-)

存在多种BlockingQueue实现方式,例如有界ArrayBlockingQueue、无界LinkedBlockingQueue、切换SynchronousQueue,甚至是PriorityBlockingQueue。所有BlockingDeques 和TransferQueues 也是BlockingQueues ;-)

于 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 回答