juc-atomic原子类之六:Striped64累加器
摘要:并发之Striped64(累加器),对于该类的实现思想: Striped64是在java8中添加用来支持累加器的并发组件,它可以在并发环境下使用来做某种计数,Striped64的设计思路是在竞争激烈的时候尽量分散竞争,在实现上,Striped64维护了一个base Count和一个Cell数组,计数
阅读全文
posted @
2013-12-13 09:40
duanxz
阅读(1418)
推荐(0)
juc-atomic原子类之四:AtomicReference原子类,CAS的ABA问题,AtomicStampedReference,AtomicMarkableReference
摘要:多个变量修改的原子性 JUC虽然提供了AtomicInteger、AtomicBoolean这些基本类型的原子类,但是有些场景并不是仅仅修改一个变量那么简单,有可能某个需要修改几个变量,但是需要这个操作具有原子性,比如说我给你举例的这个例子: (1)假如有三个变量,value1、value2、val
阅读全文
posted @
2013-12-09 13:58
duanxz
阅读(519)
推荐(1)
juc-atomic原子类之三: AtomicLongArray,AtomicLongArray,AtomicReferenceArray原子类
摘要:java.util.concurrent.atomic.AtomicXXXArray包括三种具体类:AtomicIntegerArray,AtomicLongArray,AtomicReferenceArray。 具体的介绍,都已经在开头讲过了,AtomicIntegerArray有以下特点: 可以
阅读全文
posted @
2013-12-09 11:30
duanxz
阅读(668)
推荐(0)
juc-atomic原子类之二:基本类型原子类AtomicInteger(AtomicLong、AtomicBoolean)
摘要:一、AtomicInteger简介 AtomicInteger, AtomicLong和AtomicBoolean这3个基本类型的原子类的原理和用法相似。以AtomicInteger对基本类型的原子类进行介绍。 二、AtomicInteger源码分析 2.1、类图结构 2.2、数据结构 public
阅读全文
posted @
2013-12-07 22:58
duanxz
阅读(634)
推荐(0)
juc-atomic原子类之一:体系概览
摘要:JUC包下提供的原子类底层的实现原理基本都是差不多的,都是基于volatile和CAS操作来保证线程安全的。jdk1.8的原子类如下: 根据修改的数据类型,可以将JUC包中的原子操作类可以分为4类。 1. 基本类型: AtomicInteger, AtomicLong, AtomicBoolean
阅读全文
posted @
2013-12-07 22:56
duanxz
阅读(263)
推荐(0)
JUC之Atomic系列12大类实例讲解和原理分解
摘要:在java6以后我们不但接触到了Lock相关的锁,也接触到了很多更加乐观的原子修改操作,也就是在修改时我们只需要保证它的那个瞬间是安全的即可,经过相应的包装后可以再处理对象的并发修改,以及并发中的ABA问题,本文讲述Atomic系列的类的实现以及使用方法,其中包含: 基本类:AtomicIntege
阅读全文
posted @
2013-12-06 13:49
duanxz
阅读(990)
推荐(0)
JDK线程池源码之二:线程池相关类介绍
摘要:概要-线程池类图 线程池的类图如下: 1. Executor 它是"执行者"接口,它是来执行任务的。准确的说,Executor提供了execute()接口来执行已提交的 Runnable 任务的对象。Executor存在的目的是提供一种将"任务提交"与"任务如何运行"分离开来的机制。它只包含一个函数
阅读全文
posted @
2013-12-06 13:37
duanxz
阅读(1138)
推荐(0)
JDK线程池源码之三:ThreadPoolExecutor的成员变量介绍
摘要:概要 线程池的实现类是ThreadPoolExecutor类。本章,我们通过分析ThreadPoolExecutor类,来了解线程池的原理。 ThreadPoolExecutor数据结构 ThreadPoolExecutor的数据结构如下图所示: 各个数据在ThreadPoolExecutor.ja
阅读全文
posted @
2013-12-05 09:49
duanxz
阅读(1216)
推荐(0)
JDK线程池源码之五:ThreadFactory、提交任务、关闭线程池
摘要:(一) ThreadFactory 线程池中的ThreadFactory是一个线程工厂,线程池创建线程都是通过线程工厂对象(threadFactory)来完成的。 类图如下: 上面所说的threadFactory对象,是通过 Executors.defaultThreadFactory()返回的。E
阅读全文
posted @
2013-12-04 21:01
duanxz
阅读(3264)
推荐(0)
JDK线程池原理之六: 线程池状态介绍
摘要:《Thread之一:线程生命周期及五种状态》 《juc线程池原理(四): 线程池状态介绍》 线程有5种状态:新建状态,就绪状态,运行状态,阻塞状态,死亡状态。线程池也有5种状态;然而,线程池不同于线程,线程池的5种状态是:Running, SHUTDOWN, STOP, TIDYING,TERMIN
阅读全文
posted @
2013-11-03 21:32
duanxz
阅读(1038)
推荐(0)
JDK线程池原理之四:拒绝策略示例及实现源码
摘要:一、拒绝策略介绍 二、拒绝策略对比和示例 三、拒绝策略怎么实现的? 3.1、线程池中的拒绝策略用的是策略模式 3.2、 四种拒绝策略的实现,ThreadPoolExecutor的静态内部类 3.2.1、DiscardPolicy 3.2.2、DiscardOldestPolicy 3.2.3、Abo
阅读全文
posted @
2013-11-03 21:17
duanxz
阅读(1092)
推荐(1)
JDK线程池源码之七:jdk线程池中的设计模式
摘要:一、jdk中默认线程池中的代理模式 代理模式 单例类线程池只有一个线程,无边界队列,适合cpu密集的运算。jdk中创建线程池是通过Executors类中提供的静态的方法来创建的,其中的单例类线程池的方法如下: public static ExecutorService newSingleThread
阅读全文
posted @
2013-10-31 20:35
duanxz
阅读(2613)
推荐(0)
阻塞队列之一:BlockingQueue汇总
摘要:一、阻塞队列介绍二、3种类型的BlockingQueue三、阻塞队列成员介绍四、BlockingQueue 的方法五、Queue中 remove/poll, add/offer, element/peek区别 一、阻塞队列介绍 BlockingQueue 通常用于一个线程生产对象,而另外一个线程消费
阅读全文
posted @
2013-10-31 20:08
duanxz
阅读(1143)
推荐(0)
阻塞队列之二:LinkedTransferQueue
摘要:一、LinkedTransferQueue简介 TransferQueue是一个继承了BlockingQueue的接口,并且增加若干新的方法。LinkedTransferQueue是TransferQueue接口的实现类,其定义为一个无界的队列,具有先进先出(FIFO)的特性。 有人这样评价它:"T
阅读全文
posted @
2013-10-31 09:11
duanxz
阅读(1487)
推荐(0)
阻塞队列之三:SynchronousQueue同步队列 阻塞算法的3种实现
摘要:一、SynchronousQueue简介 Java 6的并发编程包中的SynchronousQueue是一个没有数据缓冲的BlockingQueue,生产者线程对其的插入操作put必须等待消费者的移除操作take,反过来也一样。 不像ArrayBlockingQueue或LinkedListBloc
阅读全文
posted @
2013-08-12 09:23
duanxz
阅读(18830)
推荐(3)
阻塞队列之四:ArrayBlockingQueue
摘要:一、ArrayBlockingQueue简介 一个由循环数组支持的有界阻塞队列。它的本质是一个基于数组的BlockingQueue的实现。 它的容纳大小是固定的。此队列按 FIFO(先进先出)原则对元素进行排序。 队列的头部 是在队列中存在时间最长的元素。队列的尾部 是在队列中存在时间最短的元素。
阅读全文
posted @
2013-08-10 15:15
duanxz
阅读(6399)
推荐(1)
阻塞队列之五:LinkedBlockingQueue
摘要:一、LinkedBlockingQueue简介 LinkedBlockingQueue是一个使用链表完成队列操作的阻塞队列。链表是单向链表,而不是双向链表。采用对于的next构成链表的方式来存储对象。由于读只操作队头,而写只操作队尾,这里巧妙地采用了两把锁,对put和offer采用putLock,对
阅读全文
posted @
2013-07-20 10:26
duanxz
阅读(5693)
推荐(0)
阻塞队列之六:LinkedBlockingDeque
摘要:一、LinkedBlockingDeque简介 java6增加了两种容器类型,Deque和BlockingDeque,它们分别对Queue和BlockingQueue进行了扩展。 Deque是一个双端队列,deque(双端队列) 是 "Double Ended Queue" 的缩写。因此,双端队列是
阅读全文
posted @
2013-07-03 13:53
duanxz
阅读(14960)
推荐(5)
阻塞队列之七:DelayQueue延时队列
摘要:一、DelayQueue简介 是一个无界的BlockingQueue,用于放置实现了Delayed接口的对象,其中的对象只能在其到期时才能从队列中取走。这种队列是有序的(PriorityQueue实际存放Delayed接口对象),即队头对象的延迟到期时间最短(队列顶端总是最小的元素)。注意:不能将n
阅读全文
posted @
2013-05-14 17:12
duanxz
阅读(2977)
推荐(1)
并发队列之ConcurrentLinkedQueue(非阻塞队列)
摘要:前言 常用的并发队列有阻塞队列和非阻塞队列,前者使用锁实现,后者则使用CAS非阻塞算法实现,使用非阻塞队列一般性能比较好,下面就看看常用的非阻塞ConcurrentLinkedQueue是如何使用CAS实现的。 一、ConcurrentLinkedQueue简介 ConcurrentLinkedQu
阅读全文
posted @
2012-12-11 10:12
duanxz
阅读(605)
推荐(0)