考虑以下简单方法,它是使用Swing gui的应用程序的一部分:
public void updateFromGoogle(int action) {
startTime = System.currentTimeMillis();
model.updateFromGoogle(action);
System.out.println("Total run time "
+ (System.currentTimeMillis()-startTime));
}
上述方法的运行时间i =始终低于1毫。
如果我向方法添加一个无效的SwingWorker
:
public void updateFromGoogle(int action) {
startTime = System.currentTimeMillis();
SwingWorker sw = new SwingWorker<Boolean, Void>(){
@Override
protected Boolean doInBackground() throws Exception {
System.out.println("");
System.out.println("Swing worker start after "
+ (System.currentTimeMillis()-startTime));
return null;
}
@Override
public void done() {
System.out.println("Swing worker finished after "
+ (System.currentTimeMillis()-startTime));
}
};
sw.execute();
model.updateFromGoogle(action);
System.out.println("Total run time "
+ (System.currentTimeMillis()-startTime));
}
偶尔我可以看到SwingWorker
在很长一段时间后开始,例如(毫秒):
摇摆工人在19734年后开始
摇摆工人在19767年之后完成
问题:
1。是否建议偶尔在事件调度线程上运行其他长任务?
2.我如何调查导致它的任务?
编辑:在评论后,我安装了jvisualvm
,表明SwingWorker
使用了8个线程的池: