快速业务通道

《FilthyRichClients》读书笔记(一)-SwingのEDT - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-16

《FilthyRichClients》读书笔记(一)-SwingのEDT

时间:2011-06-29 BlogJava javagui

《FilthyRichClients》读完了前几个章节,现将我的体会结合工作以来从事Swing桌面开发的经验,对本书的一些重要概念进行一次分析,对书中的一些遗漏与模糊的地方及时补充,同时使读者消除长期以来“Swing性能低、界面丑陋”诸如此类的旧观念。读书笔记仅谈谈我对Swing的理解,难免会犯错误,还望广大读者指教。

书中第二章-Swing渲染基本原理 中对Swing的线程做了系统地介绍。相比其他同类Swing教程,已经讲得非常深入了。但是如果读者之前对线程的掌握程度有限,尤其是编写代码比较随意的coder们,动辄就大量编写类似下面这样的代码:

jButton1.addActionListener(new ActionListener(){   public void actionPerformed(ActionEvent e) {    // TODO   }   });

这样的代码可能是netBeans这样的工具生成的“杰作”。但是如果这个人再懒惰一点,可能会直接在TODO下面写上长长一堆代码,还伴随着不可预知的I/O操作,很多人指责界面被僵住是Swing性能的问题。在新式的JDK中,Swing已经在性能方面改进了很多,完全可以这么说:与应用程序自身的业务计算相比,界面上的耗时可以忽略。但是如果上述恶习改不掉的话,Swing永远“快”不起来,SWT也同样如此,因为它们都是单线程图形工具包。

书上有这样一段话:“EventQueue的派发机制由单独的一个线程管理,这个线程称为事件派发线程(EDT)”。和其他很多桌面API一样,Swing将GUI请求放入一个事件队列中执行。如果不明白什么是事件队列、EDT,它们是如何运作的,那么首先必须澄清四个重要的概念:分别是同步与异步、串行与并行、生产者消费者模式、事件队列。(不同领域串行与并行的含义可能是不同的)

同步与异步:同步是程序在发起请求后开始处理事件并等待处理的结果或等待请求执行完毕,在此之前程序被block住直到请求完成。而异步是当前程序发起请求后立即返回,当前程序不会立即处理该事件并等待处理的结果,请求是在稍后的某一时间才被处理。

串行与并行:所谓串行是指多个要处理请求顺序执行,处理完一个再处理下一个;并行可以理解为并发,是同时处理多个请求(实际上我们只能理解为是这样,特别是CPU数目少于线程数的机器而言,真正意义的并发是不存在的,各个线程只是断断续续地交替地执行)。下图演示了串行与并行的机制。可以这么说,在引入多线程之前,对于同一进程或者程序而言执行的都是串行操作。

串行:《FilthyRichClients》读书笔记(一)-SwingのEDT - 编程入门网 

并行:《FilthyRichClients》读书笔记(一)-SwingのEDT - 编程入门网

生产者/消费者模式:可以想象这样一副场景,某车间的一条传送带,有一个或多个入口不断产生待加工的货物,这种不断产生货物的称为生产者;传送带的末端是一个或多个工人在加工货物,称作消费者。有时由于传送带上没有足够的货物使得某一工人暂时空闲,有时又由于部分货物需加工的时间较长出现传送带上待加工的货物堆积。

《FilthyRichClients》读书笔记(一)-SwingのEDT - 编程入门网

《FilthyRichClients》读书笔记(一)-SwingのEDT(2)

时间:2011-06-29 BlogJava javagui

如果用Java实现一个简单的生产者消费者模型,利用线程的等待/通知机制很容易实现。给出最基本的同步队列的参考实现

public class SyncQueue<T> { private List<T> queue; private final Object LOCK = new Object(); public SyncQueue() {   queue = new LinkedList<T>(); } public T pop() {   synchronized (LOCK) {   while (queue.isEmpty()) {    try {    LOCK.wait();    } catch (InterruptedException e1) {    // ignore it    }   }   T e = queue.remove(0);   return e;   } } public void push(T e) {   synchronized (LOCK) {  

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号