2017-04-04 44 views
-1

可以说我们有两个线程与一个ConcurrentLinkedQueue连接。我想要的就像队列上的处理程序,以便一个线程知道另一个队列何时将其添加到队列并轮询它。那可能吗?ConcurrentLinkedQueue:如何在Java中实现处理程序?

+0

是的,这是可能的。看看http://stackoverflow.com/questions/435069/java-util-concurrentlinkedqueue/435941#435941 – Natalia

+0

如果你使用阻塞队列,你可以调用'take'。当元素可用时它将返回。 – john16384

+0

但我希望它是异步 – user3133542

回答

1

通常当线程上至少有一个生产者,并且至少有一个消费者在不同线程上时,使用ConcurrentLinkedQueue

消费者会在元素可用时立即处理该元素,以便在队列块上执行读取操作,有时会在有限的时间内执行。

根据应用程序,您可以有一个生产者和许多消费者,反之亦然。

阻塞达到您的要求(消费者线程知道什么时候插入元素)。

事实上,消费者线程块不是问题,除非您的主进程线程或除非您打算构建几百个并发消费者。

因此,队列#take()或队列#轮询(长超时,TimeUnit单元)是您的朋友,如果您只是在专用线程上运行它。

相关问题