`
alartin
  • 浏览: 207936 次
社区版块
存档分类
最新评论

Swing中的并发和多线程

阅读更多
看到很多地方讲述Swing中的并发和多线程问题,感觉讲的都不如Sun的教程,这里复述一下关键。Swing之所以和多线程紧密联系在一起是因为图形界面编程中如果只采取顺序编程(也就是你的代码或任务依次执行),会出现很大的问题,比如你要编写一个FTP客户端,你不能让文件下载的时候,用户界面死在那里,你既不能取消任务也不能和界面交互吧。所以有必要将耗时的任务,比如文件下载放到一个独立的线程中处理,而让用户同时能够干其他事情。简单来说,Swing中有三种线程:
  1. 启动线程或者初始线程: 这个线程负责调用main方法,很多顺序编程一开始就用的是这种线程。在Swing中启动线程负责很少的事务,主要干两件事情,第一件就是创建一个可运行的对象(Runnable Object),这个可运行对象的任务比较重要,它负责初始化图形界面,第二件就是将这个可运行对象安排到另外一个非常重要的线程,事件分派线程中执行。第二件事情是通过SwingUtilies的invokeLater和invokeAndWait方法来实现的。几乎所有的创建Swing组件和与Swing组件交互的代码都要在事件分派线程中执行。
  2. 事件分派线程:在Swing中负责事件处理的代码需要在一个特定的线程中运行,这个线程就是事件分派线程。大部分调用Swing方法的代码也在这个线程中运行。原因是大部分Swing对象中的方法并不是线程安全的,所以需要这个特定的事件分派线程来保证线程安全。当然也有部分swing对象中的方法指明是线程安全的,这些方法可以在任何线程中调用。你可以将事件分派线程中运行的代码想象成一系列短小的任务,大部分任务都是调用事件处理方法,例如ActionListener.actionPerformed()方法,其他任务可被程序代码通过SwingUtilities的invokeLater/invokeAndWait方法来安排。需要注意的是,在事件分派线程中的任务必须短小精悍,这意味着这些任务能够很快执行完毕,如果你发现有一个耗时的任务,那么你肯定出错了,你会发现你的图形界面经常被卡住,或者死掉了。对于耗时任务你需要另外一个线程,例如工作线程(Worker Thread)来处理。判断你的代码时候运行在事件分派线程上的方法很简单,使用javax.swing.SwingUtilities.isEventDispatchThread()方法即可。
  3. 工作线程(Worker Thread)或者后台线程(Background Thread):你可以在这个线程中处理耗时任务。
分享到:
评论

相关推荐

    图解java多线程设计模式

    精选12种与多线程和并发处理相关的设计模式 264张图表 + 300段Java示例程序 = 轻松学习多线程编程 日本经典多线程入门书,原版长销11年! 1.图文并茂 通俗易懂 日本资-深技术作家、《程序员的数学》作者结城浩执笔...

    模拟多进程并发

    模拟多进程的并发执行,java编写,swing实现

    jmeter 测试工具 使用java自测 并发测试 环境测试 压力测试

    4.完全多线程 框架允许通过多个线程并发取样和 通过单独的线程组对不同的功能同时取样。 5.精心的GUI设计允许快速操作和更精确的计时。 6.缓存和离线分析/回放测试结果。 JMeter的高可扩展性 1.可链接的取样器允许...

    Java并发编程实战

    6.1 在线程中执行任务93 6.1.1 串行地执行任务94 6.1.2 显式地为任务创建线程94 6.1.3 无限制创建线程的不足95 6.2 Executor框架96 6.2.1 示例:基于Executor的Web服务器97 6.2.2 执行策略98 6.2.3 线程池98...

    Java+swing实现学生信息管理系统源码.zip

    我们使用了多线程技术来处理并发请求和耗时操作,以保证系统的响应速度和用户体验。我们还使用了持久化技术,如数据库和文件系统,以存储和管理数据。此外,我们还采用了错误处理和日志记录等技术,以提高系统的稳定...

    Java+swing+mysql实现的汽车租赁管理系统.zip

    我们使用了多线程技术来处理并发请求和耗时操作,以保证系统的响应速度和用户体验。我们还使用了持久化技术,如数据库和文件系统,以存储和管理数据。此外,我们还采用了错误处理和日志记录等技术,以提高系统的稳定...

    Qcs.rar_即时通讯swing

    这是一个类似于QQ的即时通讯的程序,基于socket的TCP通信,支持并发多线程,带Swing界面。

    Java+swing+mysql实现的酒店管理系统项目源码.zip

    我们使用了多线程技术来处理并发请求和耗时操作,以保证系统的响应速度和用户体验。我们还使用了持久化技术,如数据库和文件系统,以存储和管理数据。此外,我们还采用了错误处理和日志记录等技术,以提高系统的稳定...

    Java+swing+mysql实现简单的购物系统项目源码.zip

    我们使用了多线程技术来处理并发请求和耗时操作,以保证系统的响应速度和用户体验。我们还使用了持久化技术,如数据库和文件系统,以存储和管理数据。此外,我们还采用了错误处理和日志记录等技术,以提高系统的稳定...

    Java+swing+mysql实现的学生选课系统项目源码.zip

    我们使用了多线程技术来处理并发请求和耗时操作,以保证系统的响应速度和用户体验。我们还使用了持久化技术,如数据库和文件系统,以存储和管理数据。此外,我们还采用了错误处理和日志记录等技术,以提高系统的稳定...

    Java+swing+mysql实现的学生选课成绩信息管理系统.zip

    我们使用了多线程技术来处理并发请求和耗时操作,以保证系统的响应速度和用户体验。我们还使用了持久化技术,如数据库和文件系统,以存储和管理数据。此外,我们还采用了错误处理和日志记录等技术,以提高系统的稳定...

    Java+swing+mysql图书管管理系统(升级版).zip

    我们使用了多线程技术来处理并发请求和耗时操作,以保证系统的响应速度和用户体验。我们还使用了持久化技术,如数据库和文件系统,以存储和管理数据。此外,我们还采用了错误处理和日志记录等技术,以提高系统的稳定...

    Java+swing+mysql实现的仓库商品管理系统项目源码.zip

    我们使用了多线程技术来处理并发请求和耗时操作,以保证系统的响应速度和用户体验。我们还使用了持久化技术,如数据库和文件系统,以存储和管理数据。此外,我们还采用了错误处理和日志记录等技术,以提高系统的稳定...

    Java+swing+mysql:Oracle实现的飞机订票系统项目源码.zip

    我们使用了多线程技术来处理并发请求和耗时操作,以保证系统的响应速度和用户体验。我们还使用了持久化技术,如数据库和文件系统,以存储和管理数据。此外,我们还采用了错误处理和日志记录等技术,以提高系统的稳定...

    Java并发编程(学习笔记).xmind

    框架通过在框架线程中调用应用程序代码将并发性引入应用程序,因此对线程安全的需求在整个应用程序中都需要考虑 基础知识 线程安全性 定义 当多个线程访问某个类时,这个类始终能表现出正确的行为,...

    Java+swing+mysql电影票购票管理系统(视频+源码).zip

    我们使用了多线程技术来处理并发请求和耗时操作,以保证系统的响应速度和用户体验。我们还使用了持久化技术,如数据库和文件系统,以存储和管理数据。此外,我们还采用了错误处理和日志记录等技术,以提高系统的稳定...

    Java+swing+mysql实现的员工工资管理系统项目源码附带视频教程.zip

    我们使用了多线程技术来处理并发请求和耗时操作,以保证系统的响应速度和用户体验。我们还使用了持久化技术,如数据库和文件系统,以存储和管理数据。此外,我们还采用了错误处理和日志记录等技术,以提高系统的稳定...

    java_diary_18.rar_JFC_swing_反射机制_国际化 java

    Day11:多线程-进程与线程及方法 Day12:线程机制与I/O流的方法 Day13:I/O流的类与编码方式 Day14:优化的I/O流与网络编程 Day15:网络编程与常用类库 Day16:国际化与新特性 Day17:新特性与并发线程 Day18:软件...

    jmeter4.0免安装版

    1.能够对HTTP和FTP服务器进行压力和性能测试...4.完全多线程 框架允许通过多个线程并发取样和 通过单独的线程组对不同的功能同时取样。 5.精心的GUI设计允许快速操作和更精确的计时。 6.缓存和离线分析/回放测试结果。

    宿舍管理系统,Java Swing 项目.zip

    它由Sun Microsystems(现在是Oracle Corporation)的James Gosling等人在1995年推出,被设计为一种简单、健壮、可移植、多线程、动态的语言。Java的主要特点和优势包括以下几个方面: 跨平台性(Write Once, Run ...

Global site tag (gtag.js) - Google Analytics