功能简介: ArrayBlockingQueue是一种基于数组实现的有界的阻塞队列.队列中的元素遵循先入先出(FIFO)的规则.新元素插入到队列的尾部,从队列头部取出元素. 和普通队列有所不同,该队列支持阻塞操作.比如从空队列中取元素,会导致当前线程阻塞,直到其他线程将元素放入队列:将元素插入已经满的队列,同样会导致当前线程阻塞,直到其他线程从队列中取出元素. ArrayBlockingQueue也支持公平和非公平策略(针对队列中元素的存取线程,也可认为是元素的生产者和消费者). 源码分析: A…
功能简介: AbstractQueuedSynchronizer(以下简称AQS)是Java并发包提供的一个同步基础机制,是并发包中实现Lock和其他同步机制(如:Semaphore.CountDownLatch和FutureTask等)的基础. AQS内部包含一个FIFO的同步等待队列,简单的说,没有成功获取控制权的线程会在这个队列中等待. AQS内部管理了一个原子的int域作为内部状态信息,并提供了一些方法来访问该域,基于AQS实现的同步机制可以按自己的需要来灵活使用这个 int域,比如:R…
功能简介: Java代码层面提供的锁机制,可做为Synchronized(jvm内置)的替代物,和Synchronized一样都是可重入的. 与Synchronized相比较而言,ReentrantLock有以下优 势:支持公平/非公平锁.支持可中断的锁.支持非阻塞的tryLock(可超时).支持锁条件.可跨代码块使用(一个地方加锁,另一个地方解锁),总之比 Synchronized更加灵活.但也有缺点,比如锁需要显示解锁.无法充分享用JVM内部性能提升带来的好处等等. 源码分析: Reentr…
转自:http://brokendreams.iteye.com/blog/2250109 功能简介: 原子量和普通变量相比,主要体现在读写的线程安全上.对原子量的是原子的(比如多线程下的共享变量i++就不是原子的),由CAS操作保证原子性.对原子量的读可以读到最新值,由volatile关键字来保证可见性. 原子量多用于数据统计(如接口调用次数).一些序列生成(多线程环境下)以及一些同步数据结构中. 源码分析: 首先,原子量的一些较底层的操作都是来自sun.misc.Unsafe类,所以原子量内…
功能简介: LinkedBlockingQueue是一种基于单向链表实现的有界的(可选的,不指定默认int最大值)阻塞队列.队列中的元素遵循先入先出 (FIFO)的规则.新元素插入到队列的尾部,从队列头部取出元素.(在并发程序中,基于链表实现的队列和基于数组实现的队列相比,往往具有更高的吞吐 量,但性能稍差一些) 源码分析: 首先看下LinkedBlockingQueue内部的数据结构: public class LinkedBlockingQueue<E> extends AbstractQ…
简介 它是一个线程池执行器(ThreadPoolExecutor),在给定的延迟(delay)后执行.在多线程或者对灵活性有要求的环境下,要优于java.util.Timer. 提交的任务在执行之前支持取消,默认情况下,在延迟到来之前,不会自动从队列中删除,但可以设置,使其立刻从队列中移除. 有两种模式,固定频率(scheduleAtFixedRate)和固定延迟(scheduleWithFixedDelay),不管哪种模式,同一个任务不会被叠加执行,即便是不同的线程执行同一个任务. 继承Thr…
简介 SynchronousQueue是一种特殊的阻塞队列,该队列没有容量. [存数据线程]到达队列后,若发现没有[取数据线程]在此等待,则[存数据线程]便入队等待,直到有[取数据线程]来取数据,并释放[存数据线程]: 同理,[取数据线程]到达队列后,若发现没有[存数据线程]在此等待,则[取数据线程]便入队等待,直到有[存数据线程]来存数据,并释放[取数据线程]. 非公平模式,由伪栈实现,TransferStack 公平模式,由伪队列实现,TransferQueue 源码解析 Transfere…
简介 ForkJoin 框架,另一种风格的线程池(相比于ThreadPoolExecutor),采用分治算法,工作密取策略,极大地提高了并行性.对于那种大任务分割小任务的场景(分治)尤其有用. 框架图 几个角色 ForkJoinTask: 有3个实现,分别是RecursiveTask,RecursiveAction,CountedCompleter. RecursiveTask: 可以递归执行的ForkJoinTask. RecursiveAction: 无返回值的RecursiveTask.…
简介 基于优先级队列,以过期时间作为排序的基准,剩余时间最少的元素排在队首.只有过期的元素才能出队,在此之前,线程等待. 源码解析 属性 private final transient ReentrantLock lock = new ReentrantLock(); // 可重入锁 private final PriorityQueue<E> q = new PriorityQueue<E>(); // 优先级队列 private Thread leader = null; //…
简介 CyclicBarrier,一个同步器,允许多个线程相互等待,直到达到一个公共屏障点. 概述 CyclicBarrier支持一个可选的 Runnable 命令,在一组线程中的最后一个线程到达之后,释放所有线程之前,该命令只在屏障点运行一次. 应用 描述 有一个矩阵,每一行数据交给一个线程去处理,处理内容是,将这行数据的每一个值相加,结果存入第一个元素中,每个线程处理完成后,会在屏障点相互等待,直到最后一个线程也到达屏障点,最后将各个线程处理的数据汇总,具体是将每一行汇总的数据(存在每行的第…