SwingWorker和Executor之间的差异

Gia*_*nis 8 java swing multithreading

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

Executors.newCachedThreadPool().execute(new Runnable() {
                    public void run() {
                        someTask();     
  });
Run Code Online (Sandbox Code Playgroud)

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

SwingWorker worker = new SwingWorker() {            
protected Object doInBackground() {
    someTask();
return null;
}
};
worker.execute();
Run Code Online (Sandbox Code Playgroud)

mKo*_*bel 7

1)SwingWorker被创建为Java Essentials Classes实现之间的桥梁和Swing Future,并且相当保证从方法中输出process,publish并且done将在上面EventDispatchThread

2)你可以调用SwingWorkerExecutor,这是最safiest方法如何建立在Swing多线程的工具SwingWorker

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

4)另一个重要的通知在这里

5)从SwingWorker你必须实现的听力状态PropertyChangeListener


How*_*ard 6

SwingWorker具有额外的方法process()done()其在事件调度线程中自动执行.如果您计划在用户界面中显示进度或最终结果,这会派上用场.