<b>Java开辟中的线程安全挑选与Swing</b>[Java编程]
本文“<b>Java开辟中的线程安全挑选与Swing</b>[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
Swing API的计划目标是强盛、机动和易用.分外地,我们但愿能让程序员们便利地成立新的Swing组件,不管是重新开始还是通过扩大我们所供应的一些组件.
出于这个目的,我们不要求Swing组件支持多线程拜候.相反,我们向组件发送恳求并在单一线程中履行恳求.
本文谈论线程和Swing组件.目的不但是为了帮忙你以线程安全的方法利用Swing API,并且注释了我们为什么会挑选目前这样的线程筹划.
本文包含以下内容:
◆单线程法则:Swing线程在同一时刻仅能被一个线程所拜候.普通来说,这个线程是事件派发线程(event-dispatching thread).
◆法则的例外:有些操作保证是线程安全的.
◆事件分发:假如你需求从事件处理(event-handling)或绘制代码以外的地方拜候UI,那么你可以利用SwingUtilities类的invokeLater()或invokeAndWait()办法.
◆成立线程:假如你需求成立一个线程——比方用来处理一些耗费大量计算本领或受I/O本领限制的工作——你可以利用一个线程工具类如SwingWorker或Timer.
为什么我们这样实现Swing:我们将用一些关于Swing的线程安全的后台资料来完毕这篇文章.
Swing的法则是:
一旦Swing组件被具现化(realized),全部大概影响或依靠于组件状况的代码都应当在事件派发线程中履行.
这个法则大概听起来有点吓人,但对很多简单的程序来说,你用不着为线程问题操心.在我们深化若何撰写Swing代码之前,让我们先来定义两个术语:具现化(realized)和事件派发线程(event-dispatching thread).
具现化的意思是组建的paint()办法已经或大概会被调用.一个作为顶级窗口的Swing组件当调用以下办法时将被具现化:setVisible(true)、show()或(大概令你诧异)pack().当一个窗口被具现化,它包含的全部组件都被具现化.另一个具现化一个组件的办法是将它放入到一个已经具现化的容器中.稍后你会看到一些对组件具现化的例子.
事件派发线程是履行绘制和事件处理的线程.比方,paint()和actionPerformed()办法会自动在事件派发线程中履行.另一个将代码放到事件派发线程中履行的办法是利用SwingUtilities类的invokeLater()办法.
全部大概影响一个已具现化的Swing组件的代码都必须在事件派发线程中履行.但这个法则有一些例外:
有些办法是线程安全的:在Swing API的文档中,线程安全的办法用以下文字标志:
This method is thread safe, although most Swing methods are not.
(这个办法是线程安全的,固然大大都Swing办法都不是.)
一个利用程序的GUI常常可以在主线程中构建和显示:下面的典型代码是安全的,只要没有(Swing或其他)组件被具现化:
public class MyApplication
{
public static void main(String[] args)
{
JFrame f = new JFrame("Labels"); // 在这里将各组件
// 加入到主框架……
f.pack();
f.show();
// 不要再做任何GUI工作……
}
}
以上是“<b>Java开辟中的线程安全挑选与Swing</b>[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |