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