我有一个在后台工作的线程,但它并不总是有工作要做。我希望它等待主线程传递数据,然后继续工作。
起初我认为这是wait()
和notify()
的用途,但它似乎相反。
我该怎么做?
答案 0 :(得分:6)
请参阅my comment。
听起来你想要一个
BlockingQueue
- 这是生产者 - 消费者问题的一个非常常见的要求。尽量不要重新发明轮子;-)
存在多个BlockingQueue
实施,例如有界ArrayBlockingQueue
,无界LinkedBlockingQueue
,移交SynchronousQueue
,甚至是PriorityBlockingQueue
。所有BlockingDeque
和TransferQueue
也是BlockingQueue
s; - )
答案 1 :(得分:6)
我建议您使用ExecutorService。我将队列与线程池结合起来。
您可以向后台提交在后台执行的任务,如果需要,您可以获得结果。
ExecutorService service = Executors.newWhateverPool();
service.submit(new Runnable() { your task here });