《Java并发编程实战》第九章 图形用户界面应用程序界面 读书笔记
一、为什么GUI是单线程化
传统的GUI应用程序通常都是单线程的。
1. 在代码的各个位置都须要调用poll方法来获得输入事件(这样的方式将给代码带来极大的混乱)
2. 通过一个“主事件循环(Main Event Loop)”来间接地运行应用程序的全部代码。
假设在主事件循环中调用的代码须要非常长时间才干运行完毕。那么用户界面就会“冻结”,直到代码运行完毕。这是由于仅仅有当运行控制权返回到主事件循环后,才干处理兴许的用户界面事件。
非常多尝试多线程的GUI框架的努力,最总都由于静态条件和死锁导致的稳定性问题,又回到单线程的时间队列模型的老路上。
1. 顺序事件处理
由于仅仅有唯一的线程在处理GUI任务。全部任务都不须要考虑并发且都是顺序运行,可是问题是假设在任务中运行时间过长,或导致兴许操作无法响应。(Android会提示Andorid Not Response异常)
2. Swing中的线程限制
GUI的单线程规则:组件与模型仅仅能在事件分派线程中被创建、改动和请求。
在Andorid中假设在子线程进行创建或者更新UI操作会抛出异常。
二、短期的GUI任务
GUI应用程序中,事件起源于事件线程。冒泡似得传递到达应用程序提供的监听器,假设是比較简单的改动颜色等,能够直接在事件线程中处理。
三、耗时GUI任务
由于GUI任务有线程限制,所以须要子线程处理耗时操作,通常最后还须要在子线程进行刷新。
1. 取消
2. 进度与完毕标识
3. SwingWorker
在Andorid中使用AsyncTask
四、共享数据模型
避免响应性的最简单的方式是初始化时一次性读取到内存中,这样须要考虑是否占用内存过多的问题。
1. 线程安全的数据模型
ConcurrentHashMap无法提供一致的数据快照。
假设一个数据模型必须被多个线程共享,并且因为堵塞、一致性或复杂度等原因无法实现一个线程安全的模型时。能够考虑使用分解模型设计。
五、其它形式的单线程子系统
将Future和newSingleThreadExecutor一起使用处理单线程可取消的任务。
《Java并发编程实战》第九章 图形用户界面应用程序界面 读书笔记的更多相关文章
- 《Java并发编程实战》第十章 避免活跃性危急 读书笔记
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/love_world_/article/details/27635333 一.死锁 所谓死锁: 是指两 ...
- 《Java并发编程实战》第八章 线程池的使用 读书笔记
一.在任务与运行策略之间的隐性解耦 有些类型的任务须要明白地指定运行策略,包含: . 依赖性任务.依赖关系对运行策略造成约束.须要注意活跃性问题. 要求线程池足够大,确保任务都能放入. . 使用线程封 ...
- Java并发编程实战4章
第4章主要介绍如何构造线程安全类. 在设计线程安全类的过程中,需要包含以下三个基本要素: 找出构成对象状态的所有变量. 找出约束状态变量的不变性条件. 建立对象状态的并发访问管理策略. 构造线程安全类 ...
- JAVA并发编程实战---第二章:线程安全性
对象的状态是指存储在状态变量中的数据.对象的状态可能包括其他依赖对象的域.例如HashMap的状态不仅存储在HashMap本身,还存储在许多Map.Entry对象中.对象的状态中包含了任何可能影响其外 ...
- Java并发编程实战3章
1.同步包括两方面:原子性和可见性. 2.可见性:因为在多线程程序中,如果没有采用正确的同步,有些线程就会得到失效数据. Java内存模型要求,变量的读取操作和写入操作都必须是原子操作,但对于非vol ...
- Java并发编程实战---第六章:任务执行
废话开篇 今天开始学习Java并发编程实战,很多大牛都推荐,所以为了能在并发编程的道路上留下点书本上的知识,所以也就有了这篇博文.今天主要学习的是任务执行章节,主要讲了任务执行定义.Executor. ...
- Java并发编程实战——读后感
未完待续. 阅读帮助 本文运用<如何阅读一本书>的学习方法进行学习. P15 表示对于书的第15页. Java并发编程实战简称为并发书或者该书之类的. 熟能生巧,不断地去理解,就像欣赏一部 ...
- 《Java并发编程实战》/童云兰译【PDF】下载
<Java并发编程实战>/童云兰译[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230062521 内容简介 本书深入浅出地介绍了Jav ...
- 《java并发编程实战》笔记
<java并发编程实战>这本书配合并发编程网中的并发系列文章一起看,效果会好很多. 并发系列的文章链接为: Java并发性和多线程介绍目录 建议: <java并发编程实战>第 ...
随机推荐
- ROS知识(17)----Actionlib使用的例子
1.Actionlib原理 英文版:DetailedDescription 翻译版:actionlib的身世之谜 2.Actionlib官方教程 Actionlib是ros的重要部件,对于复杂动作的执 ...
- GIT(5)----常用命令:新分支,切换,删除,远程推送,标签,日志
常用命令 1.新分支 创建新分支:git branch <branch_name> 创建分支并切换到新的分支上:git checkout -b <branch_name> 2. ...
- java基础学习总结——面向对象2
一.JAVA类的定义
- MVC扩展Filter,通过继承HandleErrorAttribute,使用log4net或ELMAH组件记录服务端500错误、HttpException、Ajax异常等
□ 接口 public interface IExceptionFilter{ void OnException(ExceptionContext filterContext);} Except ...
- envi几何校正
转载自原文 介绍地理参考数据的知识以及ENVI 中图像对图像.图像对地图两种校正方法 1.打开基图像XX.img和待纠正的图像YY.img(不带地理信息,可以双击其主图像窗口可以在Cursor Loc ...
- 常用VPS测试工具整理
来源: http://www.vpser.net/manage/vps-test-tool.html 购买VPS前主要是使用一些网络测试工具如ping.tracert.WinMTR之类的工具进行测试, ...
- arcgis python 创建 SQLite 数据库
# -*- ################# """ Tool name: Create SQLite Database Source: CreateSQLiteDat ...
- 通过使用第三方开源jar包sigar.jar我们可以获得本地的信息
1.下载sigar.jar sigar官方主页 sigar-1.6.4.zip 2.按照主页上的说明解压包后将相应的文件copy到java路径.比如windows32位操作系统需要将lib中sigar ...
- 关于JAVA多线程并发synchronized的测试与合理使用
在项目开发中, 或许会碰到JAVA的多线程处理, 为保证业务数据的正常, 必须加上锁机制, 常用的处理方法一般是加上synchronized关键字, 目前JDK版本对synchronized已经做了 ...
- Snail—Hibernate反向生成实体类及配置文件
今天学习了Hibernate的反向生成类文件 第一步.打开myeclipse中的database视图,找到对应的表,选中后右键单击. watermark/2/text/aHR0cDovL2Jsb2cu ...