SwingWorker:在专用线程中执行长时间 GUI 交互任务的抽象类。
使用 Swing 编写多线程应用程序时的两个约束条件::
不应该在事件指派线程上运行耗时任务。否则应用程序将无响应。只能在事件指派线程 上访问 Swing 组件。
SwingWorker 的生命周期中包含三个线程:
当前线程:在此线程上调用 execute() 方法。它调度 SwingWorker 以在 worker 线程上执行并立即返回。可以使用 get 方法等待 SwingWorker 完成。
Worker 线程:在此线程上调用 doInBackground() 方法。所有后台活动都应该在此线程上发生。要通知 PropertyChangeListeners 有关绑定 (bound) 属性的更改,请使用 firePropertyChange 和 getPropertyChangeSupport() 方法。默认情况下,有两个可用的绑定属性:state 和 progress。
事件指派线程:所有与 Swing 有关的活动都在此线程上发生。SwingWorker 调用 process 和 done() 方法,并通知此线程的所有 PropertyChangeListener。通常,当前线程就是事件指派线程。