Java核心技术(多线程)五

来源:互联网 发布:mac 便签 放在桌面 编辑:程序博客网 时间:2024/06/07 16:20

线程与Swing

使用线程是为了提高程序的响应性能。当程序需要做某些耗时的工作时,应该启动另一个工作器线程而不是阻塞用户接口。Swing不是线程安全的,如果你试图在多个线程中操纵用户界面的元素,那么用户界面可能崩溃。将线程与Swing一起使用时,必须遵循:

*如果一个动作需要花费很长时间,在一个独立的工作器线程中做这件事不要在事件分配线程中做。

*除了事件分配线程,不要在任何线程中接触Swing组件。

应该使用EventQueue类的invokeLater和invokeAndWait方法使设置Swing界面的方法在事件分配线程中执行。invokeLater的方法立即返回,而run方法被异步执行;invokeAndWait方法等待直到run方法被确实执行过为止。

SwingWorker类是Swing工作器,是在专用线程中执行长时间GUI交互任务的抽象类。覆盖doInBackground方法来完成耗时的工作,不时地调用publish方法来报告工作进度。这一方法在工作器线程中执行。publish方法使得process方法在事件分配线程中执行来处理进度数据。当工作完成时,done方法在事件分配线程中被调用以便完成UI的更新。