<b>Swing中的并发-操纵SwingWorker线程情势</b>[Java编程]
本文“<b>Swing中的并发-操纵SwingWorker线程情势</b>[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
本文介绍Java SE 6中的SwingWorker线程工作情势,翻译Concurrency in Swing(http://java.sun.com/docs/books/tutorial/uiswing/concurrency/index.html).
author: ZJ 2007-7-16
Blog: http://zhangjunhd.blog.51cto.com/
本文将谈论并发机制在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组件的代码必须在事件派发线程中履行.这个约束将在下文中谈论.
以上是“<b>Swing中的并发-操纵SwingWorker线程情势</b>[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |