- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Swing中的并发-使用SwingWorker线程模式
本文将讨论并发机制在Swing编程中的应用。
谨慎地使用并发机制对Swing开发人员来说非常重要。一个好的Swing程序使用并发机制来创建不会失去响应的用户接口-不管是什么样的用户交互,程序总能够对其给出响应。创建一个有响应的程序,开发人员必须学会如何在Swing框架中使用多线程。
一个Swing开发人员将会与下面几类线程打交道:
[1]Initial threads(初始线程),此类线程将执行初始化应用代码。
[2]The event dispatch thread(事件派发线程),所有的事件处理代码在这里执行。大多数与Swing框架交互的代码也必须执行这个线程。
[3]Worker threads(工作线程),也称作background threads(后台线程),此类线程将执行所有消耗时间的任务。
开发人员不需要在代码中显式的创建这些线程:它们是由runtime或Swing框架提供的。开发人员的工作就是利用这些线程来创建具有响应的,持久的Swing程序。
如同所有其他在Java平台上运行的程序,一个Swing程序可以创建额外的线程和线程池,这需要使用本文即将介绍的方法。本文将介绍以上这三种线程。工作线程的讨论将涉及到使用javax.swing.SwingWorker类。这个类有许多有用的特性,包括在工作线程任务与其他线程任务之间的通信与协作。?
1.初始线程
每个程序都会在应用逻辑开始时生成一系列的线程。在标准的程序中,只有一个这样的线程:这个线程将调用程序主类中的main方法。在applet中初始线程是applet对象的构造子,它将调用init方法;这些actions可能在一个单一的线程中执行,或在两个或三个不同的线程中,这些都依据Java平台的具体实现。在本文中,我们称这类线程为初始线程(initial threads)。
在Swing程序中,初始线程没有很多事情要做。它们最基本的任务是创建一个Runnable对象,用于初始化GUI以及为那些用于执行事件派发线程中的事件的对象编排顺序。一旦GUI被创建,程序将主要由GUI事件驱动,其中的每个事件驱动将引起一个在事件派发线程中事件的执行。程序代码可以编排额外的任务给事件驱动线程(前提是它们会被很快的执行,这样才不会干扰事件的处理)或创建工作线程(用于执行消耗时间的任务)。
一个初始线程编排GUI创建任务是通过调用javax.swing.SwingUtilities.invokeLater或javax.swing.SwingUtilities.invokeAndWait。这两个方法都带有一个唯一的参数:Runnable用于定义新的任务。它们唯一的区别是:invokerLater仅仅编排任务并返回;invokeAndWait将等待任务执行完毕才返回。
看下面示例:
SwingUtilities.invokeLater(new Runnable()) {
??? public void run() {
??????? createAndShowGUI();
??? }
}?在applet中,创建GUI的任务必须被放入init方法中并且使用invokeAndWait;否则,初始过程将有可能在GUI创建完之前完成,这样将有可能出现问题。在其他的情况下,编排GUI创建任务通常是初始线程中最后一个被执行的,所以使用invokeLater或invokeAndWait都可以。
为什么初始线程不直接创建GUI?因为几乎所有的用于创建和交互Swing组件的代码必须在事件派发线程中执行。这个约束将在下文中讨论。
?2.事件派发线程
Swing事件的处理代码在一个特殊的线程中执行,这个线程被称为事件派发线程。大部分调用Swing方法的代码都在这个线程中被执行。这样做是必要的,因为大部分Swing对象是“非线程安全的”。
可以将代码的执行想象成在事件派发线程中执行一系列短小的任务。大部分任务被事件处理方法调用,诸如ActionListener.actionPerformed。其余的任务将被程序代码编排,使用invokeLater或invokeAndWait。在事件派发线程中的任务必须能够被快速执行完成,如若不然,未经处理的事件被积压,用户界面将变得“响应迟钝”。
如果你需要确定你的代码是否是在事件派发线程中执行,可调用javax.swing.SwingUtilities.isEventDispatchThread。
?3.工作线程与SwingWorker
当一个Swing程序需要执行一个长时间的任务,通常将使用一个工作线程来完成。每个任务在一个工作线程中执行,它是一个javax.swing.SwingWorker类的实例。SwingWor
您可能关注的文档
- HIV病毒技术分析.docx
- HIV感染者的弓形虫感染技术分析.docx
- HLA半相合免疫细胞治疗肿瘤疾病备案教材技术分析.docx
- ICU常见病症技术分析.docx
- ICU患者肺部真菌感染技术分析.docx
- IncTCF7通过调控TCF7,激活wnt通路,促进了肝癌干细胞更新与增殖技术分析.docx
- Informationfortors_revised_April14给医生的信息-关于2型糖尿病逆转治疗技术分析.docx
- IOS-XR,A9K,CRS,76知识相关技术分析.docx
- iPad_mini你必须知道的使用技巧_15个技术分析.docx
- IPS大综述技术分析.docx
- 中国国家标准 GB/T 15445.3-2025粒度分析结果的表述 第3部分:试验曲线的参考模型拟合.pdf
- 《GB/T 15445.3-2025粒度分析结果的表述 第3部分:试验曲线的参考模型拟合》.pdf
- 中国国家标准 GB/Z 41305.3-2025环境条件 电子设备振动和冲击 第3部分:利用轨道车辆运输.pdf
- 《GB/Z 41305.3-2025环境条件 电子设备振动和冲击 第3部分:利用轨道车辆运输》.pdf
- GB/Z 41305.3-2025环境条件 电子设备振动和冲击 第3部分:利用轨道车辆运输.pdf
- 中国国家标准 GB/T 46713.4-2025轨道交通 机车车辆 辅助供电系统蓄电池 第4部分:镍氢蓄电池.pdf
- 《GB/T 46713.4-2025轨道交通 机车车辆 辅助供电系统蓄电池 第4部分:镍氢蓄电池》.pdf
- GB/T 46713.4-2025轨道交通 机车车辆 辅助供电系统蓄电池 第4部分:镍氢蓄电池.pdf
- 中国国家标准 GB/Z 106-2025质量管理体系 组织变革管理 过程.pdf
- GB/Z 106-2025质量管理体系 组织变革管理 过程.pdf
原创力文档


文档评论(0)