多线程java逐个执行每个SwingWorker类
我有多个扩展SwingWorker的类。我希望完成的是一个接一个地执行每个类(而不执行前一个类的done方法中的下一个类)。例如,假设我有:
ClassSwingW1 csw1 = new ClassSwingW1();
csw1.execute;
ClassSwingW2 csw2 = new ClassSwingW2();
csw2.execute;
ClassSwingW3 csw3 = new ClassSwingW3();
csw3.execute;
等等
public class ClassSwingW1 extends SwingWorker<Void, Void> {
@Override
protected Void doInBackground() throws Exception {
//do something
return null;
}
}
public class ClassSwingW2 extends SwingWorker<Void, Void> {
@Override
protected Void doInBackground() throws Exception {
//do something
return null;
}
}
public class ClassSwingW3 extends SwingWorker<Void, Void> {
@Override
protected Void doInBackground() throws Exception {
//do something
return null;
}
}
我希望csw2在csw1完成后执行,csw3在csw2完成后执行。我不要 同时执行。我将如何做到这一点?多谢各位
# 1 楼答案
Memory Consistency Properties总结了JLS:“线程中的每个动作都发生在该线程中的每个动作之前,该线程中的每个动作都是按照程序的顺序进行的。”只需将每个worker的
doInBackground()
重新分解为一个单独的方法,并按顺序调用每个方法:# 2 楼答案
建议我查看
Executor
调用一个SwingWorker
实例,从PropertyChangeListener进行监听请read carrefully this thread,尤其是
@trashgod
Executor
&SwingWorker
&PropertyChangeListener
&Swing GUI
使用PropertyChangeListener的输出
# 3 楼答案
你可以用^{} method 代替
execute()
,它会一直阻塞,直到SwingWorker完成它的工作。确保你没有从EDT打电话Javadoc摘录:
# 4 楼答案
使用Executors.newSingleThreadExecutor()怎么样