【阻塞队列】-- DelayQueue源码解析(jdk1.8)

概述

DelayQueue是一个基于PriorityQueue优先级队列实现的有序的无界阻塞队列。放入队列的元素必须实现Delayed接口,其中的对象只能在其到期时才能从队列中取走。

【阻塞队列】-- PriorityBlockingQueue源码解析(jdk1.8)

概述

PriorityBlockingQueue一个无界的带有优先级的动态阻塞队列,插入队列的元素默认情况下采用自然顺序升序排列,如果用户传入了Comparator,那么使用传入的Comparator进行排序。PriorityBlockingQueue内部使用一把锁用于消费,当容量到达阈值时,会自动扩容,扩容时由volatile修饰的allocationSpinLock作为cas自旋锁的标识(保证扩容操作不会阻塞take操作)。

【阻塞队列】-- LinkedBlockingDeque源码解析(jdk1.8)

概述

LinkedBlockingDequeLinkedBlockingQueue不同,它是一个由链表组成的无界双端阻塞队列,生产消费用一把锁,头尾都可以生产消费元素,由于多了一个生产插入的入口,因此多线程情况下,入队的效率会提升一倍。

【阻塞队列】-- LinkedBlockingQueue源码解析(jdk1.8)

概述

LinkedBlockingQueue是由链表组成的单向无界阻塞(严格意义上来并不是无界限) 队列。与ArrayBlockingQueue 不同的是,LinkedBlockingQueue生产消费各用一把锁,生产用的是putLock,消费是takeLock,目的就是为了增大吞吐量,但是因为每个节点都是一个对象,所以比较耗费内存。

【阻塞队列】-- ArrayBlockingQueue源码解析(jdk1.8)

概述

ArrayBlockingQueue是由数组组成的一个单向有界阻塞队列。ArrayBlockingQueue内部只有一把锁ReentrantLock,通过ReentrantLockCondition来控制内部的生产与消费。ArrayBlockingQueue创建时必须指定容量,当队列满后会阻塞生产的线程,队列空时会阻塞消费的线程。

【阻塞队列】-- BlockingQueue总结(jdk1.8)

概述

BlockingQueue即是我们所说的阻塞队列,它是一个接口,继承自Queue接口。后面我们要讲的阻塞队列,都实现自该接口。包括:

【阻塞队列】-- CyclicBarrier源码解析(jdk1.8)

概述

CyclicBarrierCountDownLatch类似,它们都是阻塞一组线程直到某个事件的发生。CyclicBarrierCountDownLatch的关键区别在于,CyclicBarrier中的所有的线程必须同时达到屏蔽点才能继续执行,如果其中一个线程被中断,那么所有的等待的线程都会立刻被唤醒,并且抛出异常。而CountDownLatch中线程之间不会收到干扰。CyclicBarrier可以复用,每次打破屏障后,都会生成一个新的屏障,供下次使用,而CountDownLatch用一次之后就无效了。

【阻塞队列】-- Semaphore源码解析(jdk1.8)

概述

​ 上一篇我们解析了CountDownLatchSemaphoreCyclicBarrierCountDownLatch一样,都是基于AQS实现的同步工具类。Semaphore用来控制线程的并发,初始时会指定一个许可数permits,线程执行前需要获取许可,获取到许可后许可数-1,线程会向下执行,如果没有可用许可,就会被阻塞。直到其他线程执行完成释放许可后,被阻塞线程才会继续尝试获取许可。

CountDownLatch源码解析(jdk1.8)

概述

CountDownLatch是基于AQS实现的一个同步工具类。它允许一个线程一直等待,直到其他线程执行完成后再执行。CountDownLatch源码比较简单,基于AQS实现共享锁的等待 ,初始化时只需要设置一个初始值,后续针对锁的状态进行控制,最后根据锁的状态来释放等待线程即可。CountDownLatchCyclicBarrier不同,8.19是不可复用的,CountDownLatch释放等待线程后,就不能再次使用了。看此源码之前,建议先看AQS源码解析

ReentrantReadWriteLock源码解析(jdk1.8)

概述

ReentrantReadWriteLock基于AQS实现的读写锁,写锁和读锁分别使用排他锁、共享锁实现。

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×