图形用户界面应用程序
9.1 为什么GUI是单线程的
9.1.1 串行时间处理
9.1。2 Swing中的单线程封闭机制
Swing的单线程规则是:Swing中的组件以及模型只能在这个事件分发线程中进行创建、修改以及查询。
9.2 短时间的GUI任务
模型对象与视图对象的控制流
st=>start: EDT
op1=>operation: 鼠标点击
op2=>operation: 动作事件
op3=>operation: 动作监听者
op4=>operation: 更新表格模型
op5=>operation: 表格修改事件
op6=>operation: 表格监听者
op7=>operation: 更新表格视图
st->op1->op2->op3->op4->op5->op6->op7
9.3 长时间的GUI任务
9.3.1 取消
9.3.2 进度标识和完成标识
9.3.3 SwingWorker
9.4 共享数据模型
9.4.1 线程安全的数据模型
9.4.2 分解数据模型
如果体格数据模型必须被多个线程共享,而且由于阻塞,一致性或复杂度等原因而无法实现一个线程安全的模型时,可以考虑使用分解模型设计。
9.5 其他形式的单线程子系统
小结
所有GUI框架基本上都实现为单线程的子系统,其中所有与表现相关的代码都作为任务在事件线程中运行。由于只有一个事件线程,因此运行时间较长的任务会降低GUI程序的影响性,所以应该放在后台线程中运行。在一些辅助类(例如SwingWorkrt以及在本章中构建的BackgroundTask)中提供了对取消、进度指示以及完成指示的支持,因此对于执行时间较长的任务来说,无论在任务中包含了GUI组件还是非GUI组件,在开发时可以得到简化。