一、事件分发线程和主线程
默认情况下,所有的AWT或者基于Swing的应用程序,都是开始于两个线程的。其中一个就是主线程,它处理main方法里面的代码。另外一个线程,被称作“事件分发线程”(Event-dispatching thread),它负责处理事件、绘图、和布局。所有在主线程中编写的对GUI进行绘制、处理的语句都会在后台自动放入到事件分发线程中等待处理,而除主线程之外的其他线程则在自己线程中进行处理。
而监听器里面的处理方法也是放到事件分发线程中进行处理(可以通过静态方法SwingUtilities.isEventDispatchThread()验证)举例来说,你在actionPerformed()方法里面写的代码是自动在“事件分发线程”(Event-dispatching thread)里面被执行的(你不必为此作什么事情)。而且,这对所有其他的事件处理方法都是成立的。正是由于这个原因,“事件分发线程”(Event-dispatching thread)在Swing和AWT里面具有极其重要的作用,这个线程在维护组件状态和显示方面扮演着一个基础性的角色。
既然,“事件分发线程”(Event-dispatching thread)要执行所有的监听器里面的方法,处理事件、绘图、和布局等,那么event-handling, painting,以及layout等方法必须要快速执行,就变的相当的重要了。否则的话,就会为了等待一个事件处理,比方说repaint、layout的完成而被堵塞,这样你的应用程序看起来就僵住不动了。
二、线程安全
在Java中Swing是线程不