从18年开始就想写下年度总结,一直拖动19年,然而还是在2020年的开端提起了锈迹斑斑的笔… … 惭愧 回望18年 生活上完成了两件大事儿: 1. 完成了北漂着陆 有了一个自己的小窝 走上了负翁的道路 2. 找到了我的开瓶盖儿 结束了单身生涯 工作上,从 ...
并发笔记之CountDownLatch分析
CountDownLatch
也是同步的辅助工具,它允许一个或多个线程等待直到在其他线程中完成一组操作。CountDownLatch
由一个给定的count值初始化,其await()
操作会一直等待
直到countDown()
操作将count值递减为0为止,然后会释放所有阻塞的线程(即await后的所有操作都会立即返回)。但相比CyclicBarrier
这个操作只能执行一次,count不会被重置。
并发笔记之CAS分析
CAS,Compare And Swap,即比较并交换。整个AQS同步组件、Atomic原子类操作等等都是以CAS实现的,甚至ConcurrentHashMap在1.8版本也调整为了CAS+synchronized。
Lock/synchronized是一种悲观锁,但大多数情况并没有大量的竞争,相对而言CAS是一种乐观锁策略,认为竞争很少发生,一旦发生则抛给处理方处理重试还是采取其他策略,由于
没有加锁带来的较高开销和加锁中的临界区限制,这种无锁机制比加锁具有更高的扩展性。
并发笔记之volatile实现原理
volatile
是轻量级的synchronized
,理解volatile特性的一个好办法就是把对volatile变量的读/写,看成是使用同一把锁对这些单个读/写操作做同步。
并发笔记之AQS原理分析
AQS
、AbstractQueuedSynchronizer,即队列同步器。他是构建其他同步组件的基础框架,如ReentrantLock、ReentrantReadWriteLock、Semaphore、CountDownLatch等。
并发笔记之Semaphore分析
Semaphore
是一个计数信号量。从概念上讲,信号量维护了一组许可,每个acquire
操作都会阻塞直到有一个许可可用然后使用这个许可。每个release
相当于会添加一个许可,同时潜在
也就是释放了一个阻塞的acquire
。但是并没有一个实际的许可对象,信号量只是根据计数来采取相应的行动。
并发笔记之CyclicBarrier分析
CyclicBarrier
是一个同步辅助类,允许一组线程互相等待直到到达一个公共屏障点(common barrier),当涉及到一组固定大小必须相互等待的线程是非常有用的。
他之所以称为cyclic
是因为当线程释放,CyclicBarrier
可以被重复使用。
并发笔记之Synchronized实现原理
初识java解决线程并发问题,首先想到的可能就是synchronized
关键字,操作简单;但相对于Lock
,synchronized
是一个重量级锁 并不是那么高效
但JDK1.6对其进行了各种优化后,性能有了很大提升。那么synchronized
的实现机制是什么?JDK是如果对它进行优化以及锁优化机制、锁的存储结构和升级过程是什么样的呢?
ConcurrentHashMap
ConcurrentHashMap是HashMap的线程安全版本,内部也是使用数组、链表、红黑树的结构存储元素。 其继承关系如下: 主要属性public class ConcurrentHashMap<K,V> extends AbstractMap<K,V> imp ...