SwingWorker和Executor之间的差异

时间:2012-01-08 18:11:04

标签: java multithreading swing

我正在使用SwingWorker在我正在制作的应用程序上执行一些重载任务。虽然今天我遇到了Executor类和这个例子:

Executors.newCachedThreadPool().execute(new Runnable() {
                    public void run() {
                        someTask();     
  });

有人可以解释为什么会使用SwingWorker而不是上面的例子吗?这是我目前使用SwingWorker的方式:

SwingWorker worker = new SwingWorker() {            
protected Object doInBackground() {
    someTask();
return null;
}
};
worker.execute();

2 个答案:

答案 0 :(得分:7)

1)SwingWorker创建为实现Java Essentials Classes之间的桥梁Future和Swing之间的桥梁,并且完全保证方法processpublish和{的outoput {1}}将在done

2)您可以从EventDispatchThread调用SwingWorker,这是最安全的方法,如何通过工具Executor创建multithreading in Swing

3)仔细注意数字或线程,因为SwingWorker并不关心Executor life_cycle

4)另一个重要的noticehere

5)对于来自SwingWorkers的收听状态,您必须实施SwingWorker

答案 1 :(得分:6)

SwingWorker有其他方法process()done(),它们会在事件派发线程中自动执行。如果您打算在用户界面中显示进度或最终结果,这会派上用场。