君子博学而日参省乎己 则知明而行无过矣

博客园 首页 新随笔 联系 订阅 管理

2013年11月3日 #

摘要: 知其然synchronized这类线程同步的机制可以解决多线程并发问题,在这种解决方案下,多个线程访问到的,都是同一份变量的内容。为了防止在多线程访问的过程中,可能会出现的并发错误。不得不对多个线程的访问进行同步,这样也就意味着,多个线程必须先后对变量的值进行访问或者修改,这是一种以延长访问时间来换取线程安全性的策略。而ThreadLocal类为每一个线程都维护了自己独有的变量拷贝。每个线程都拥有了自己独立的一个变量,竞争条件被彻底消除了,那就没有任何必要对这些线程进行同步,它们也能最大限度的由CPU调度,并发执行。并且由于每个线程在访问该变量时,读取和修改的,都是自己独有的那一份变量拷贝,变 阅读全文
posted @ 2013-11-03 18:10 刺猬的温驯 阅读(662) 评论(0) 推荐(0) 编辑

摘要: 什么是Future?用过Java并发包的朋友或许对Future (interface) 已经比较熟悉了,其实Future 本身是一种被广泛运用的并发设计模式,可在很大程度上简化需要数据流同步的并发应用开发。在一些领域语言(如Alice ML )中甚至直接于语法层面支持Future。这里就以java.util.concurrent.Future 为例简单说一下Future的具体工作方式。Future对象本身可以看作是一个显式的引用,一个对异步处理结果的引用。由于其异步性质,在创建之初,它所引用的对象可能还并不可用(比如尚在运算中,网络传输中或等待中)。这时,得到Future的程序流程如果并不急于 阅读全文
posted @ 2013-11-03 16:18 刺猬的温驯 阅读(176) 评论(0) 推荐(0) 编辑

摘要: 参考Wiki,Future,Promise或Delay是用于并发编程的一种同步构造。它们表示一个对象,这个对象用来作为一次计算的结果的代理,而该结果被初始化为未知,因为这个对象产生时计算还没有结束(或还没有开始)。Future是对异步过程调用的结果的抽象,它并不关心具体的异步机制。这样无论是线程、网络、IO或者RPC,只要是异步过程调用,都可以通过Future的概念统一处理。此外提供基于Future的接口可以简化代码编写,以顺序的方式编写异步代码。在.NET提供的异步编程模型(APM)中使用的IAsyncResult接口某种程度上就是Future的概念,在APM中,调用异步操作后立即获得一个I 阅读全文
posted @ 2013-11-03 16:14 刺猬的温驯 阅读(511) 评论(0) 推荐(0) 编辑

摘要: 前几天看hdfs QJM的代码,里面看到一个ListenableFuture,说实话对于Java,目前我还只是通过看代码,遇到没见过的再去查的方式,也着实是没有时间和精力再去通篇研读诸如《thinking in Java》这样的大砖块了,现在这样的方式,目前来说应该是够用了。重点还是放在系统和业务上,语言本身本不应该成为障碍。言归正传,回到ListenableFuture, 在网上看了一下相关的资料,把它的来龙去脉了解了一下,在这里记录一下。前面提到的ListenableFuture, 是google开源的自己的Java Library Guava(http://code.google.com 阅读全文
posted @ 2013-11-03 16:07 刺猬的温驯 阅读(267) 评论(0) 推荐(0) 编辑

摘要: 本文参考了 http://space.itpub.net/13685345/viewspace-374940,原文作者:javagui在多线程编程当中,总会提到图形编程,比如java中的swing,并一再提出,在swing中,一切都是单线程的。所有的界面更新操作都必须在排 队似地进行。这样的目的在于,避免由于多线程的处理导致界面渲染以及组件排列异常,同时也避免了由于多线程带来的加锁访问以及等待锁的情况发生。 EventQueue的派发机制由单独的一个线程管理,这个线程称为事件派发线程(EDT)”。和其他很多桌面API一样,Swing将GUI请求放入一个事件队列中执行。 这个可以这样来理解,.. 阅读全文
posted @ 2013-11-03 15:53 刺猬的温驯 阅读(929) 评论(0) 推荐(0) 编辑

摘要: 《FilthyRichClients》读完了前几个章节,现将我的体会结合工作以来从事Swing桌面开发的经验,对本书的一些重要概念进行一次 分析,对书中的一些遗漏与模糊的地方及时补充,同时使读者消除长期以来“Swing性能低、界面丑陋”诸如此类的旧观念。读书笔记仅谈谈我对Swing的 理解,难免会犯错误,还望广大读者指教。 书中第二章-Swing渲染基本原理 中对Swing的线程做了系统地介绍。相比其他同类Swing教程,已经讲得非常深入了。但是如果读者之前对线程的掌握程度有限,尤其是编写代码比较随意的coder们,动辄就大量编写类似下面这样的代码:jButton1.addActionList 阅读全文
posted @ 2013-11-03 15:50 刺猬的温驯 阅读(394) 评论(0) 推荐(0) 编辑

摘要: 本系列文章导航深入浅出Java多线程(1)-方法 join深入浅出Java多线程(2)-Swing中的EDT(事件分发线程)深入浅出多线程(3)-Future异步模式以及在JDK1.5Concurrent包中的实现深入浅出多线程(4)对CachedThreadPool OutOfMemoryError难题的一些想法深入浅出多线程(5)以并行包线程池为例说说线程池的设计需求及使用深入浅出多线程(6)分析并行包线程池的设计与实现本文主要解决的问题是: 如何使其Swing程序只能运行一个实例? 抛开Swing, 我们的程序是通过java 命令行启动一个进程来执行的,该问题也就是说要保证这个进程的.. 阅读全文
posted @ 2013-11-03 15:25 刺猬的温驯 阅读(1428) 评论(0) 推荐(0) 编辑

摘要: 本系列文章导航深入浅出Java多线程(1)-方法 join深入浅出Java多线程(2)-Swing中的EDT(事件分发线程)深入浅出多线程(3)-Future异步模式以及在JDK1.5Concurrent包中的实现深入浅出多线程(4)对CachedThreadPool OutOfMemoryError难题的一些想法深入浅出多线程(5)以并行包线程池为例说说线程池的设计需求及使用深入浅出多线程(6)分析并行包线程池的设计与实现 接深入浅出多线程系列4, 线程对象的创建和销毁是需要花费系统资源的,通过线程池,可以避免该问题并提高系统的响应时间。这种情形类似我们常提到的数据库连接池。 线程池... 阅读全文
posted @ 2013-11-03 15:24 刺猬的温驯 阅读(328) 评论(0) 推荐(0) 编辑

摘要: 本系列文章导航深入浅出Java多线程(1)-方法 join深入浅出Java多线程(2)-Swing中的EDT(事件分发线程)深入浅出多线程(3)-Future异步模式以及在JDK1.5Concurrent包中的实现深入浅出多线程(4)对CachedThreadPool OutOfMemoryError难题的一些想法深入浅出多线程(5)以并行包线程池为例说说线程池的设计需求及使用深入浅出多线程(6)分析并行包线程池的设计与实现 接上篇,在上篇中介绍了线程池的设计需求以及使用,在这里我们分析Concurrent包中线程池的实现类 ThreadPoolExecutor的设计,是不是感觉没意义,人家. 阅读全文
posted @ 2013-11-03 15:01 刺猬的温驯 阅读(361) 评论(0) 推荐(0) 编辑