|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
但是对于JAVA技术类的学习,我觉得大课堂反而会影响自身独立思考的过程,因为上课的时候,老师讲课的速度很快为了不遗漏要点,通常会仔细的听,
本文先容JavaSE6中的SwingWorker线程事情形式,翻译ConcurrencyinSwing(http://java.sun.com/docs/books/tutorial/uiswing/concurrency/index.html)。
author:ZJ2007-7-16
Blog:http://zhangjunhd.blog.51cto.com/
本文将会商并发机制在Swing编程中的使用。
审慎地利用并发机制对Swing开辟职员来讲十分主要。一个好的Swing程序利用并发机制来创立不会得到呼应的用户接口-不论是甚么样的用户交互,程序总可以对其给出呼应。创立一个有呼应的程序,开辟职员必需学会怎样在Swing框架中利用多线程。
一个Swing开辟职员将会与上面几类线程打交道:
[1]Initialthreads(初始线程),此类线程将实行初始化使用代码。
[2]Theeventdispatchthread(事务派发线程),一切的事务处置代码在这里实行。年夜多半与Swing框架交互的代码也必需实行这个线程。
[3]Workerthreads(事情线程),也称作backgroundthreads(背景线程),此类线程将实行一切损耗工夫的义务。
开辟职员不必要在代码中显式的创立这些线程:它们是由runtime或Swing框架供应的。开辟职员的事情就是使用这些线程来创立具有呼应的,耐久的Swing程序。
好像一切其他在Java平台上运转的程序,一个Swing程序能够创立分外的线程和线程池,这必要利用本文行将先容的办法。本文将先容以上这三种线程。事情线程的会商将触及到利用javax.swing.SwingWorker类。这个类有很多有效的特征,包含在事情线程义务与其他线程义务之间的通讯与合作。
1.初始线程
每一个程序城市在使用逻辑入手下手时天生一系列的线程。在尺度的程序中,只要一个如许的线程:这个线程将挪用程序主类中的main办法。在applet中初始线程是applet对象的机关子,它将挪用init办法;这些actions大概在一个单一的线程中实行,或在两个或三个分歧的线程中,这些都根据Java平台的详细完成。在本文中,我们称这类线程为初始线程(initialthreads)。
在Swing程序中,初始线程没有良多事变要做。它们最基础的义务是创立一个Runnable对象,用于初始化GUI和为那些用于实行事务派发线程中的事务的对象编排按次。一旦GUI被创立,程序将次要由GUI事务驱动,个中的每一个事务驱动将引发一个在事务派发线程中事务的实行。程序代码能够编排分外的义务给事务驱动线程(条件是它们会被很快的实行,如许才不会搅扰事务的处置)或创立事情线程(用于实行损耗工夫的义务)。
一个初始线程编排GUI创立义务是经由过程挪用javax.swing.SwingUtilities.invokeLater或javax.swing.SwingUtilities.invokeAndWait。这两个办法都带有一个独一的参数:Runnable用于界说新的义务。它们独一的区分是:invokerLater仅仅编排义务并前往;invokeAndWait将守候义务实行终了才前往。
看上面示例:
SwingUtilities.invokeLater(newRunnable()){
publicvoidrun(){
createAndShowGUI();
}
}
在applet中,创立GUI的义务必需被放进init办法中而且利用invokeAndWait;不然,初始历程将有大概在GUI创立完之前完成,如许将有大概呈现成绩。在其他的情形下,编排GUI创立义务一般是初始线程中最初一个被实行的,以是利用invokeLater或invokeAndWait都能够。
为何初始线程不间接创立GUI?由于几近一切的用于创立和交互Swing组件的代码必需在事务派发线程中实行。这个束缚将鄙人文中会商。
<p>
专门做了这个例子;而java的这个例子好像就是为了教学而写的,很多教学目的的例子是不考虑优化、性能的。 |
|