1 现象及问题
在Swing程序中,经常能看到如下这种代码:
为何用invokeLater,而不直接调用呢?
大多数Swing的API非线程安全,不能在任意地方调用,应该只在EDT中调用。
Swing的线程安全靠事件队列和EDT来保证。
EventQueue的派发机制由单独的一个线程 - 事件派发线程(EDT)管理。
Swing将GUI请求放入一个事件队列中执行。通过EDT,使得非线程安全的Swing函数库避开了并发问题。
3 Swing 中的线程分类
一个Swing程序中一般有下面三种类型的线程:
-
初始化线程(Initial Thread)
每个程序必须有一个main方法作为程序的入口。
该方法运行在初始化或启动线程上。初始化线程读取程序参数并初始化一些对象。
在许多Swing程序中,该线程主要目的是启动程序的GUI。创建UI的点,也就是程序开始将控制权转交给UI时的点。
一旦GUI启动后,对大多数事件驱动的桌面程序,初