并发容器之ConcurrentLinkedDeque
摘要:在Java中,最常用的数据结构可能是列表。有数目不详的元素列表,你可以添加、阅读、或删除任何位置的元素。此外,并发列表允许不同的线程列表中添加或删除元素时不产生任何数据不一致。非阻塞列表提供如下操作,如果操作不能立即完成,列出抛出异常或者返回一个null值。Java 7中引入了ConcurrentL
阅读全文
posted @
2012-10-23 15:31
duanxz
阅读(939)
推荐(0)
阻塞队列之八:PriorityBlockingQueue优先队列
摘要:一、PriorityBlockingQueue简介 PriorityBlockingQueue是带优先级的无界阻塞队列,每次出队都返回优先级最高的元素,是二叉树最小堆的实现,研究过数组方式存放最小堆节点的都知道,直接遍历队列元素是无序的。 PriorityBlockingQueue类似于ArrayB
阅读全文
posted @
2012-10-22 15:05
duanxz
阅读(5573)
推荐(0)
并发队列对比之一:ConcurrentLinkedQueue、LinkedBlockingQueue对比分析
摘要:关于ConcurrentLinkedQueue和LinkedBlockingQueue: 1.LinkedBlockingQueue是使用锁机制,ConcurrentLinkedQueue是使用CAS算法,虽然LinkedBlockingQueue的底层获取锁也是使用的CAS算法 2.关于取元素,C
阅读全文
posted @
2012-10-12 14:18
duanxz
阅读(2480)
推荐(0)
并发队列对比之二:LinkedBlockingQueue和ArrayBlockingQueue性能对比
摘要:回顾下,LinkedBlockingQueue和ArrayBlockingQueue在实现上不同点有: 1、ArrayBlockingQueue使用数组存储数据,LinkedBlockingQueue使用单向链表存储数据; 2、ArrayBlockingQueue使用一个可重入锁和这个锁生成的两个条
阅读全文
posted @
2012-10-11 15:57
duanxz
阅读(1838)
推荐(0)
Copy-On-Write容器之二:CopyOnWriteArraySet
摘要:一、CopyOnWriteArraySet简介 1. CopyOnWriteArraySet继承于AbstractSet,这就意味着它是一个集合。 2. CopyOnWriteArraySet包含CopyOnWriteArrayList对象,它是通过CopyOnWriteArrayList实现的。而
阅读全文
posted @
2012-10-10 15:53
duanxz
阅读(774)
推荐(0)
Copy-On-Write容器之一:CopyOnWriteArrayList
摘要:一、CopyOnWriteArrayList简介 为了维护对象的一致性快照,要依靠不可变性(immutability)来消除在协调读取不同的但是相关的属性时需要的同步。对于集合,这意味着如果有大量的读(即get() ) 和迭代,不必同步操作以照顾偶尔的写(即 add() )调用。对于新的 CopyO
阅读全文
posted @
2012-10-10 11:36
duanxz
阅读(831)
推荐(0)
并发容器Map之一:ConcurrentHashMap原理(jdk1.7)
摘要:一、ConcurrentHashMap简介 HashTable容器在竞争激烈的并发环境下表现出效率低下的原因,是因为所有访问HashTable的线程都必须竞争同一把锁,那假如容器里有多把锁,每一把锁用于锁容器其中一部分数据,那么当多线程访问容器里不同数据段的数据时,线程间就不会存在锁竞争,从而可以有
阅读全文
posted @
2012-10-09 09:57
duanxz
阅读(567)
推荐(1)
并发容器Map之一:ConcurrentHashMap原理(jdk1.8)
摘要:一、ConcurrentHashMap简介 二、ConcurrentHashMap源码分析 2.1、类图结构 2.2、数据结构 1.8中放弃了Segment臃肿的设计,取而代之的是采用Node + CAS + Synchronized来保证并发安全进行实现,结构如下: 只有在执行第一次put方法时才
阅读全文
posted @
2012-10-08 11:11
duanxz
阅读(1631)
推荐(0)
并发容器Map之一:(jdk1.8) ConcurrentHashMap的红黑树实现分析
摘要:红黑树 红黑树是一种特殊的二叉树,主要用它存储有序的数据,提供高效的数据检索,时间复杂度为O(lgn),每个节点都有一个标识位表示颜色,红色或黑色,有如下5种特性:1、每个节点要么红色,要么是黑色;2、根节点一定是黑色的;3、每个空叶子节点必须是黑色的;4、如果一个节点是红色的,那么它的子节点必须是
阅读全文
posted @
2012-10-08 10:41
duanxz
阅读(1110)
推荐(0)
并发容器Map之一: ConcurrentHashMap jdk1.7与jdk1.8区别
摘要:主要设计上的变化有以下几点: 不采用segment而采用node,锁住node来实现减小锁粒度。 设计了MOVED状态 当resize的中过程中 线程2还在put数据,线程2会帮助resize。 使用3个CAS操作来确保node的一些操作的原子性,这种方式代替了锁。 sizeCtl的不同值来代表不同
阅读全文
posted @
2012-09-04 14:02
duanxz
阅读(382)
推荐(0)
并发容器Map之二:ConcurrentNavigableMap
摘要:使用线程安全的NavigableMap Java API 提供的有趣的数据结构,并且你可以在并发应用程序中使用,它就是ConcurrentNavigableMap接口的定义。实现ConcurrentNavigableMap接口的类存储以下两部分元素: 唯一标识元素的key定义元素的剩余数据每部分在不
阅读全文
posted @
2012-08-28 15:14
duanxz
阅读(2134)
推荐(0)
深入理解StampedLock及其实现原理
摘要:背景(注释): 一个基于容量并且带有三种模式的锁,用于控制读取/写入访问。StampedLock的状态由版本和模式组成。锁获取操作返回一个用于展示和访问锁状态的邮编(stamp)变量:这些方法的"try"版本通过返回0代表获取锁失败。锁释放以及其他相关方法需要使用邮编(stamps)变量作为参数,如
阅读全文
posted @
2012-08-27 13:41
duanxz
阅读(1623)
推荐(0)
并发容器Map之二:ConcurrentSkipListMap
摘要:概要 本章对Java.util.concurrent包中的ConcurrentSkipListMap类进行详细的介绍。内容包括:ConcurrentSkipListMap介绍ConcurrentSkipListMap原理和数据结构ConcurrentSkipListMap函数列表Concurrent
阅读全文
posted @
2012-08-27 09:40
duanxz
阅读(2250)
推荐(0)
AQS:AbstractQueuedSynchronizer超详细原理解析
摘要:今天我们来研究学习一下AbstractQueuedSynchronizer类的相关原理,java.util.concurrent包中很多类都依赖于这个类所提供队列式同步器,比如说常用的ReentranLock,Semaphore和CountDownLatch等。 为了方便理解,我们以一段使用Reen
阅读全文
posted @
2012-08-09 13:23
duanxz
阅读(682)
推荐(0)
原子操作的实现原理(锁和循环CAS)
摘要:1 引言 原子(atom)本意是“不能被进一步分割的最小粒子”,而原子操作(atomic operation)意为”不可被中断的一个或一系列操作” 。在多处理器上实现原子操作就变得有点复杂。本文让我们一起来聊一聊在Inter处理器和Java里是如何实现原子操作的。 2 术语定义 3 处理器如何实现原
阅读全文
posted @
2012-08-09 12:55
duanxz
阅读(2480)
推荐(0)
Unsafe魔术类(java可直接操作内存(),挂起与恢复,CAS操作)
摘要:java为什么会引入unsafe类 sun.misc.Unsafe至少从2004年Java1.4开始就存在于Java中了。在Java9中,为了提高JVM的可维护性,Unsafe和许多其他的东西一起都被作为内部使用类隐藏起来了。但是究竟是什么取代Unsafe不得而知,个人推测会有不止一样来取代它,那么
阅读全文
posted @
2012-08-08 16:25
duanxz
阅读(2006)
推荐(1)
JAVA CAS原理、unsafe、AQS
摘要:concurrent包的实现 由于java的CAS同时具有 volatile 读和volatile写的内存语义,因此Java线程之间的通信现在有了下面四种方式: A线程写volatile变量,随后B线程读这个volatile变量。 A线程写volatile变量,随后B线程用CAS更新这个volati
阅读全文
posted @
2012-08-08 16:24
duanxz
阅读(2167)
推荐(1)