Swing中的并发和多线程(转)


简单来说,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):你可以在这个线程中处理耗时任务。

你可能感兴趣的:(Swing中的并发和多线程(转))