随笔分类 -  Java concurrency

摘要:http://www.cnblogs.com/bronte/articles/2321188.html 本文介绍的Semaphore实现基于synchronized,wait()和notify/notifyAll(),这是java并发包之前的典型实现方式.在eclipse的源码中可以找到不少这样的案例,下文中也会把eclipse中的几个实现类作为案例以分析之. 注,这里介绍的信号量实现是基于java语言机制,用于实现多线程间的同步操作,所以对S,P(S),V(S)等概念的介绍将结合本文内容,做合适的调整,读者可阅读操作系统相关书籍的信号量章节获取标准定义.*本文内容---信号量简介---典.. 阅读全文
posted @ 2012-07-27 17:39 balaamwe 编辑
摘要:http://www.cubrid.org/blog/dev-platform/how-to-analyze-java-thread-dumps/When there is an obstacle, or when a Java based Web application is running much slower than expected,we need to usethread dumps. If thread dumps feel like very complicated to you,this article may help you very much. Here I will 阅读全文
posted @ 2012-05-18 15:33 balaamwe 编辑
摘要:http://blog.csdn.net/dlite/article/details/4218105 在历史上,Java试图提供过抢占式限制中断,但问题多多,例如前文介绍的已被废弃的Thread.stop、Thread.suspend和 Thread.resume等。另一方面,出于Java应用代码的健壮性的考虑,降低了编程门槛,减少不清楚底层机制的程序员无意破坏系统的概率。 如今,Java的线程调度不提供抢占式中断,而采用协作式的中断。其实,协作式的中断,原理很简单,就是轮询某个表示中断的标记,我们在任何普通代码的中都可以实现。 例如下面的代码: volatile bool isInterru 阅读全文
posted @ 2012-05-18 00:18 balaamwe 编辑
摘要:http://www.ibm.com/developerworks/cn/java/j-jtp11234/十五年前,多处理器系统是高度专用系统,要花费数十万美元(大多数具有两个到四个处理器)。现在,多处理器系统很便宜,而且数量很多,几乎每个主要微处理器都内置了多处理支持,其中许多系统支持数十个或数百个处理器。要使用多处理器系统的功能,通常需要使用多线程构造应用程序。但是正如任何编写并发应用程序的人可以告诉你的那样,要获得好的硬件利用率,只是简单地在多个线程中分割工作是不够的,还必须确保线程确实大部分时间都在工作,而不是在等待更多的工作,或等待锁定共享数据结构。问题:线程之间的协调如果线程之间不 阅读全文
posted @ 2011-12-25 17:35 balaamwe 编辑
摘要:http://teamojiao.iteye.com/blog/456866什么是Future?用过Java并发包的朋友或许对Future (interface)已经比较熟悉了,其实Future本身是一种被广泛运用的并发设计模式,可在很大程度上简化需要数据流同步的并发应用开发。在一些领域语言(如Alice ML)中甚至直接于语法层面支持Future。这里就以java.util.concurrent.Future为 例简单说一下Future的具体工作方式。Future对象本身可以看作是一个显式的引用,一个对异步处理结果的引用。由于其异步性质,在创建之初,它所 引用的对象可能还并不可用(比如尚在运 阅读全文
posted @ 2011-12-13 13:37 balaamwe 编辑
摘要:synchronized原语和ReentrantLock在一般情况下没有什么区别,但是在非常复杂的同步应用中,请考虑使用ReentrantLock,特别是遇到下面2种需求的时候。1.某个线程在等待一个锁的控制权的这段时间需要中断2.需要分开处理一些wait-notify,ReentrantLock里面的Condition应用,能够控制notify哪个线程3.具有公平锁功能,每个到来的线程都将排队等候下面细细道来……先说第一种情况,ReentrantLock的lock机制有2种,忽略中断锁和响应中断锁,这给我们带来了很大的灵活性。比如:如果A、B2个线程去竞争锁,A线程得到了锁,B线程等待,但是 阅读全文
posted @ 2011-11-28 17:09 balaamwe 编辑
摘要:转自http://www.iteye.com/topic/333669 JDK1.5以后加入了concurrent包,主要是为了提高多线程的开发效率,其中提供了很多支持并发的集合类,其中包括:ConcurrentHashMap。大家知道HashTable也是支持并发环境的,也就是说多线程安全的,那两者有什么区别呢?分析 其实简单的说是同步机制有区别,具体区别又在那里呢? 请看HashTable的put方法:Java代码/***Mapsthespecified<code>key</code>tothespecified*<code>value</code 阅读全文
posted @ 2011-11-22 17:24 balaamwe 编辑
摘要:转自http://www.iteye.com/topic/109150volatile, 用更低的代价替代同步为什么 使用volatile比同步代价更低?同步的代价, 主要由其覆盖范围决定, 如果可以降低同步的覆盖范围, 则可以大幅提升程序性能.而volatile的覆盖范围仅仅变量级别的. 因此它的同步代价很低.volatile原理是什么?volatile的语义, 其实是告诉处理器, 不要将我放入工作内存, 请直接在主存操作我.(工作内存详见java内存模型)因此, 当多核或多线程在访问该变量时, 都将直接 操作 主存, 这从本质上, 做到了变量共享.volatile的有什么优势?1, 更大的 阅读全文
posted @ 2011-11-22 17:12 balaamwe 编辑