浅谈Swing线程三种

开发 后端
本文介绍Swing线程,包括启动Swing线程或者初始线程,事件分派Swing线程和工作Swing线程。

看到很多地方讲述Swing中的并发和多线程问题,感觉讲的都不如Sun的教程,这里复述一下关键。Swing之所以和多线程紧密联系在一起是因为图形界面编程中如果只采取顺序编程(也就是你的代码或任务依次执行),会出现很大的问题,比如你要编写一个FTP客户端,你不能让文件下载的时候,用户界面死在那里,你既不能取消任务也不能和界面交互吧。所以有必要将耗时的任务,比如文件下载放到一个独立的线程中处理,而让用户同时能够干其他事情。简单来说,Swing中有三种线程:

1. 启动Swing线程或者初始线程: 这个线程负责调用main方法,很多顺序编程一开始就用的是这种线程。在Swing中启动线程负责很少的事务,主要干两件事情,***件就是创建一个可运行的对象(Runnable Object),这个可运行对象的任务比较重要,它负责初始化图形界面,第二件就是将这个可运行对象安排到另外一个非常重要的线程,事件分派线程中执行。第二件事情是通过SwingUtilies的invokeLater和invokeAndWait方法来实现的。几乎所有的创建Swing组件和与Swing组件交互的代码都要在事件分派线程中执行。

2. 事件分派Swing线程:在Swing中负责事件处理的代码需要在一个特定的线程中运行,这个线程就是事件分派线程。大部分调用Swing方法的代码也在这个线程中运行。原因是大部分Swing对象中的方法并不是线程安全的,所以需要这个特定的事件分派线程来保证线程安全。当然也有部分swing对象中的方法指明是线程安全的,这些方法可以在任何线程中调用。你可以将事件分派线程中运行的代码想象成一系列短小的任务,大部分任务都是调用事件处理方法,例如ActionListener.actionPerformed()方法,其他任务可被程序代码通过SwingUtilities 的invokeLater/invokeAndWait方法来安排。需要注意的是,在事件分派线程中的任务必须短小精悍,这意味着这些任务能够很快执行完毕,如果你发现有一个耗时的任务,那么你肯定出错了,你会发现你的图形界面经常被卡住,或者死掉了。对于耗时任务你需要另外一个线程,例如工作线程 (Worker Thread)来处理。判断你的代码时候运行在事件分派线程上的方法很简单,使用javax.swing.SwingUtilities.isEventDispatchThread()方法即可。

3. 工作Swing线程(Worker Thread)或者后台线程(Background Thread):你可以在这个线程中处理耗时任务。

【编辑推荐】

  1. Swing全屏幕模式
  2. 浅谈EventQueue in Swing
  3. 浏览器的Swing地址栏
  4. AWT和Swing显示GIF 动画
  5. SWT比价Swing和AWT
责任编辑:佚名 来源: 博客园
相关推荐

2009-05-07 15:02:42

OracleJoin查询

2012-03-26 12:23:25

JavaSwing

2009-06-29 18:21:29

Hibernate

2009-06-09 16:53:22

Java Swing处理方法比较

2013-01-10 10:26:56

SQL Server数据库

2018-04-02 14:29:18

Java多线程方式

2009-07-16 16:01:55

EventQueue

2021-05-12 18:02:23

方法创建线程

2009-07-14 18:28:58

Swing入门

2009-07-15 13:06:38

Swing组件

2009-07-15 14:29:24

构造JListSwing

2022-08-24 08:07:11

MyBatisSQLMySQL

2009-07-16 12:58:50

Swing控件

2009-07-17 12:44:01

NetBeans开发S

2022-07-07 00:33:34

Java线程同步

2011-01-18 15:35:59

jQueryJavaScriptweb

2009-06-29 18:18:53

Java多线程向线程传递数据

2010-09-24 19:18:22

SQL索引

2023-08-03 16:02:24

Objectwaitnotify

2022-07-06 07:08:58

CPythonPython返回值
点赞
收藏

51CTO技术栈公众号