java - SwingWorker同步方法队列阻塞还是什么?

标签 java swing concurrency blocking swingworker

理论问题。如果我有两个 SwingWorkers 和一个带有方法

的outputObject
public void synchronized outputToPane(String output)

如果每个 SwingWorker 中都有一个循环,如图所示:

//SwingWorker1
while(true) { 
     outputObject.outputToPane("garbage");
}
//SwingWorker2
Integer i=0;
while(true) {
     outputObject.outputToPane(i.toString());
     i++;
}

它们如何相互作用? outputToPane 方法是否从一个线程接收参数并阻塞另一个线程,直到第一个线程完成为止,或者它是否构建一个将按照收到的顺序执行的任务队列,或者其他选项?

我问的原因:
我有两个线程将进行一些繁重的数字运算,一个具有不可暂停的数据流,另一个来自文件。我希望他们在达到某些里程碑时都能输出到中央消息传递区域;但是,在等待另一个线程完成输出时,我不能冒数据流被阻塞的风险。那么我将面临丢失数据的风险。

最佳答案

synchronized 仅保证互斥。不公平,这实际上意味着您的工作人员可能会很好地交替,或者第一个工作人员可能会获得优先权并完全阻止第二个工作人员直到完成,或者介于两者之间。

参见Reentrantlock有关公平性的更多信息,请参阅文档。也许您可以考虑使用它而不是synchronized。也许更好的选择是使用 Queue .

关于java - SwingWorker同步方法队列阻塞还是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8315597/

相关文章:

java - 有没有更好的方法来实例化类中的通用字段?

java - JAVA中的Hadoop MapReduce输出

java - 使用包含可编辑 JTextArea 的 JPanel 呈现 JTree 叶

java - 带有 mongodb bson 库的 Mongodb 驱动程序在单独的项目中使用时会导致 completableFuture 挂起

database - Oracle : Locking or not? 中的并发更新

java - 如果实际参数是 lambda,则在重载方法之间进行选择

java - 写入文本文件时如何更改字体大小

java - 从 SwingWorker 实时更新 GUI

java - 使用 Swing 创建列表和列表项的操作

concurrency - 简单并发程序的归纳不变量是什么?