小编Sur*_*eon的帖子

BlockingQueues和线程访问顺序

我有一种情况,多个线程将通过调用轮询一个BlockingQueuetake().我想知道的是以下内容:

如果多个线程正在等待队列接收一个项目,那么它们是否会优先按照它们调用的顺序从队列中取出项目,take()或者线程从队列中取出的顺序是否是任意的?

谢谢!

注意:我过去曾为此类事情编写过自己的实现,但我想知道BlockingQueueJava中的实现是否会为我做这个.

java queue multithreading

5
推荐指数
1
解决办法
224
查看次数

如何正确使用SwingWorker上的publish()和process()方法?

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的上下文中,工作流程是什么?

如果需要澄清,请告诉我.

java swing swingworker

5
推荐指数
1
解决办法
4592
查看次数

标签 统计

java ×2

multithreading ×1

queue ×1

swing ×1

swingworker ×1