我有一种情况,多个线程将通过调用轮询一个BlockingQueuetake().我想知道的是以下内容:
如果多个线程正在等待队列接收一个项目,那么它们是否会优先按照它们调用的顺序从队列中取出项目,take()或者线程从队列中取出的顺序是否是任意的?
谢谢!
注意:我过去曾为此类事情编写过自己的实现,但我想知道BlockingQueueJava中的实现是否会为我做这个.
SwingWorker中的这两个方法 目前让我感到困惑,似乎很容易错误地使用它们.
方法publish()描述了以下内容:
将数据块发送到进程(java.util.List)方法.此方法将从doInBackground方法内部使用,以提供中间结果,以便在流程方法内的事件调度线程上进行处理.
这对我来说意味着当我的工作线程正在执行其doInBackground()方法时,我能够创建"块"(这些是特定的还是这只是一种引用消息对象的方法?),然后发布它们在我的Swing GUI上进行处理.
这导致我进行处理().javadoc概述了以下内容:
在Event Dispatch Thread上异步接收来自publish方法的数据块.
在查看了这两种方法的文档后,是否有人可以澄清这种方法背后的机制是什么?据我所知,这是一个异步过程,但由于它是在EDT上进行的,我想象中有一些可预测性.
该publish()文档的状态这样的:
因为在Event Dispatch Thread上异步调用了process方法,所以在执行process方法之前可能会对publish方法进行多次调用.出于性能目的,所有这些调用都合并为一个带有连接参数的调用.
总结一下,我的问题有两个:
process()?process()在SwingWorker和EDT的上下文中,工作流程是什么?如果需要澄清,请告诉我.