前言ArrayBlockingQueue 是采用数组实现的有界阻塞线程安全队列。如果向已满的队列继续塞入元素,将导致当前的线程阻塞。如果向空队列获取元素,那么将导致当前线程阻塞。ArrayBlockingQueue 继承 AbstractQueue 类,实现 BlockingQueue 和 Seri ...
StampedLock
本文代码基于Java8前言读写锁如果使用不当,容易出现“饥饿”问题,比如在读线程非常多,写线程非常少的情况下,很容易导致写线程“饥饿”。虽然公平策略在一定程度上可以缓解这个问题,但是鱼与熊掌不可兼得,公平策略是以牺牲系统吞吐量为代价的。于是StampedLock 类应运而生,在 JDK1.8 时引入 ...
AtomicInteger解析
本文代码基于 JDK 8前言AtomicInteger 是 Integer 类型的线程安全原子类,可以在应用程序中以原子方式更新 int 值,是 atomic 框架中经常使用的原子类。AtomicInteger 使用示例public class AtomicTest { public s ...
ThreadLocal分析
本文代码基于Java8前言ThreadLocal 的官方API解释为:该类提供了线程局部 (thread-local) 变量。这些变量不同于它们的普通对应物,因为访问某个变量(通过其 get 或 set 方法)的每个线程都有自己的局部变量,它独立于变量的初始化副本。ThreadLocal 实例通常是 ...
ReentrantReadWriteLock解析
本文代码基于Java8前言ReentrantReadWriteLock 是 Lock 的另一种实现方式, ReentrantLock 是一个排他锁,同一时间只允许一个线程访问,而 ReentrantReadWriteLock 允许多个读线程同时访问,但不允许写线程和读线程、写线程和写线程同时访问。读 ...
Semaphore解析
前言Semaphore 是JDK1.5的 java.util.concurrent 并发包中提供的一个并发工具类。所谓 Semaphore 即 信号量 的意思。这个叫法并不能很好地表示它的作用,更形象的说法应该是 许可证管理器 。Semaphore 是一个计数信号量。从概念上将,Semaphore ...
ReentrantLock解析
本文代码基于Java8前言Reentrant 可重入的;重入;可再入的。即再次进入的意思,entrant: 新职员;新生;新会员;新成员。JDK 中独占锁的实现除了使用关键字 synchronized 外,还可以使用 ReentrantLock。虽然在性能上ReentrantLock 和 synch ...
CountDownLatch解析
本文代码基于Java8前言CountDownLatch ,英文翻译为倒计时锁存器,是一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。也是基于 AQS,它是 AQS 的共享功能的一个实现。它主要用来保证完成某个任务的先决条件满足,是一个同步工具类,用来协调多个线程 ...