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