使用SwingWorker代替Thread或有Runnable什么好处?
use*_*421 15
我认为SwingWorker的文档非常好:
一个抽象类,用于在专用线程中执行冗长的GUI交互任务.
使用Swing编写多线程应用程序时,需要记住两个约束:( 有关更多详细信息,请参阅 如何使用线程):
- 不应在Event Dispatch Thread上运行耗时的任务.否则应用程序将无响应.
- 应仅在Event Dispatch Thread上访问Swing组件.
这些约束意味着具有时间密集型计算的GUI应用程序需要至少两个线程:1)执行冗长任务的线程和2)所有GUI相关活动的事件调度线程(EDT).这涉及线程间通信,这可能很难实现.
SwingWorker适用于需要在后台线程中运行长时间运行任务并在完成或处理时为UI提供更新的情况.SwingWorker的子类必须实现doInBackground()方法来执行后台计算.
当然你可以使用Thread,Runtime和SwingUtilities(invokeLater)来做到这一点,但使用SwingWorker类更容易,而且可能更不容易出错.
duf*_*ymo 12
Thread和Runnable是Java 1.0的一部分; 他们和那时候一样好.
从那以后,新的并发类提炼了所有关于多线程的知识(谢谢Doug Lea和其他人).编写多线程代码非常困难.新的并发类(包括SwingWorker)试图使这更容易.
首先注意强类型的泛型.内置了一种机制来发布和处理最终结果和中间结果.
使用Thread和Runnable可以模仿它们,但是SwingWorker已经为你完成了它.
| 归档时间: |
|
| 查看次数: |
8148 次 |
| 最近记录: |