我有一个线程在后台工作,但它并不总是有工作要做。我希望它等待主线程传递的数据,然后继续工作。Java Worker线程等待
起初我以为这就是wait()
和notify()
是为了,但它似乎反其道而行。
我该怎么做?
我有一个线程在后台工作,但它并不总是有工作要做。我希望它等待主线程传递的数据,然后继续工作。Java Worker线程等待
起初我以为这就是wait()
和notify()
是为了,但它似乎反其道而行。
我该怎么做?
参见my comment。
听起来像是你想要一个
BlockingQueue
- 这是生产者 - 消费者问题的一个非常普遍的要求。尽量不要重新发明轮子;-)
有存在多个BlockingQueue
实现方式中,例如有界的ArrayBlockingQueue
,无界的,传递SynchronousQueue
,甚至PriorityBlockingQueue
。全部BlockingDeque
s和TransferQueue
s也 s ;-)
我建议你使用一个ExecutorService。我将一个队列与一个线程池结合在一起。
您可以向后台提交任务并在后台执行,您可以根据需要获得结果。
ExecutorService service = Executors.newWhateverPool();
service.submit(new Runnable() { your task here });
听起来像是你想有一个['BlockingQueue'(http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/BlockingQueue.html) - 这是一个对生产者 - 消费者问题非常普遍的要求。尽量不要重新发明轮子;-) – oldrinb
不知道这一个。作为一个答案,我会接受它); – Pijusn
作为一个备注,等待/通知工作很好(生产者发布到共享集合和调用通知,消费者等待直到通知然后从共享集合读取),但现在并发实用程序(又名BlockingQueue)简化了等待/通知不再需要直接使用的事情。 – jtahlborn