简单来说,Swing中有三种线程:
1、启动线程或者初始线程: 这个线程负责调用main方法,很多顺序编程一开始就用的是这种线程。在
Swing中启动线程负责很少的事务,主要干两件事情:
第一件就是创建一个可运行的对象(Runnable Object),这个可运行对象的任务比较重要,它负责初始化
图形界面。
第二件就是将这个可运行对象安排到另外一个非常重要的线程,事件分派线程中执行。第二件事情是通
过SwingUtilies的invokeLater和invokeAndWait方法来实现的。几乎所有的创建Swing组件和与Swing组
件交互的代码都要在事件分派线程中执行。
2、事件分派线程:在Swing中负责事件处理的代码需要在一个特定的线程中运行,这个线程就是事件分派
线程。大部分调用Swing方法的代码也在这个线程中运行。原因是大部分Swing对象中的方法并不是线
程安全的,所以需要这个特定的事件分派线程来保证线程安全。当然也有部分swing对象中的方法指明
是线程安全的,这些方法可以在任何线程中调用。你可以将事件分派线程中运行的代码想象成一系列
短小的任务,大部分任务都是调用事件处理方法,例如ActionListener.actionPerformed()方法,其
他任务可被程序代码通过SwingUtilities的invokeLater/invokeAndWait方法来安排。需要注意的是,
在事件分派线程中的任务必须短小精悍,这意味着这些任务能够很快执行完毕,如果你发现有一个耗
时的任务,那么你肯定出错了,你会发现你的图形界面经常被卡住,或者死掉了。对于耗时任务你需
要另外一个线程,例如工作线程(Worker Thread)来处理。判断你的代码时候运行在事件分派线程上的
方法很简单,使用javax.swing.SwingUtilities.isEventDispatchThread()方法即可。
3、 工作线程(Worker Thread)或者后台线程(Background Thread):你可以在这个线程中处理耗时任务。