理论问题。如果我有两个 SwingWorkers 和一个带有方法
的outputObjectpublic 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/