标准方案:用户按下按钮并启动大任务。 EventThread创建SwingWorker
来执行任务,并终身实现。允许哪些线程调用SwingWorker#publish?
现在,由于大任务是高度可并行化的,因此线程所做的第一件事就是创建一堆工作线程和工作区。
我的问题:工作线程是否允许调用SwingWorker#publish()
触发GUI
更新或者只允许SwingWorker
线程允许这样做?
感谢, 卡斯滕
[编辑]一些伪代码,以我的使用情况更清楚一点。问题基本上是:代码是否正确?如果我忽略了waitForAllWorkerThreadsToFinish();
?
public class MySwingWorker extends SwingWorker {
class MyWorkerThread extends Runnable {
void run() {
while(!exitCondition) {
doSomeWork();
publish(progressUpdate);
reEvaluateExitCondition();
}
}
}
public Void doInBackground() {
createAndStartBunchOfMyWorkerThreads();
waitForAllWorkerThreadsToFinish();
}
void process(List<V> chunks) {
updateGuiWithProgress(chunks);
}
}
感谢您的回答。我认为CountDownLatch并不适合我的情况,因为工作线程需要经常更新GUI以显示进度,而不仅仅是在完成时。 理想情况下,他们想调用publish(),并在GUI中显示一些进度信息。 – Carsten
这可能有助于更新您的问题,更详细地介绍工人相互依赖的性质。 – trashgod
公平点。添加了我的用例的伪代码示例。 – Carsten