![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
并发编程
HHozi
本博客主要是用来记录自己学习上的总结,以便日后复习。很多文章都是从别的博客文章直接摘抄复制,望见谅。
展开
-
StampedLock
StampedLock 读模板: final StampedLock sl = new StampedLock(); // 乐观读 long stamp = sl.tryOptimisticRead(); // 读⼊⽅法局部变量 ...... // 校验 stamp if (!sl.validate(stamp)){ // 升级为悲观读锁 stamp = sl.readLock(); try { // 读⼊⽅法局部变量 ..... } finally转载 2020-06-09 15:36:32 · 112 阅读 · 0 评论 -
限流器:Semaphore,RateLimiter
Semaphore实现一个简单的限流器 class ObjPool<T, R> { final List<T> pool; // 用信号量实现限流器 final Semaphore sem; // 构造函数 ObjPool(int size, T t){ pool = new Vector<T>(){}; for(int i=0; i<size; i++){ pool.add(t);转载 2020-06-09 14:20:07 · 500 阅读 · 0 评论 -
锁的分类
偏向锁 大多数情况下,锁不仅不存在多线程竞争,而且总是由同一线程多次获得,为了让线程获得锁的代价更低而引入偏向锁。 当一个线程访问同步代码块并获取锁时,会在对象头和栈帧中的锁记录里存储锁偏向的线程ID,以后该线程再进入和退出同步块时不需要进行CAS操作来加锁和解锁,只需要简单地测试一下对象头的Mark Word里是否存储着指向当前线程的偏向锁。如果测试成功,表示线程已经获得了锁。如果测试失败,则需...转载 2019-05-27 23:50:47 · 76 阅读 · 0 评论 -
Java中并发常用工具类
来源于:https://blog.csdn.net/coderinchina/article/details/54914852 CountDownLatch Semaphore(信号量) CountDownLatch countDownLatch允许一个或多个线程等待其他线程完成操作。 通过构造函数来确定线程数 final CountDownLatch countDownLatch = new CountDownLatch(3); 通过.countDown()来使同步计数器减1 countDownLa转载 2020-06-07 16:17:19 · 146 阅读 · 0 评论 -
Happens-Before规则
来源于:极客时间的Java并发编程实战 Happens-Before 规则: 前面一个操作的结果对后续操作是可见的。 1.程序的顺序性规则 这条规则是指在一个线程中,按照程序顺序,前面的操作 Happens-Before 于后续的任意 操作。 2.volatile 变量规则 这条规则是指对一个 volatile 变量的写操作, Happens-Before 于后续对这个 volatile 变量的读操作。(写操作对读操作可见) 3.传递性 这条规则是指如果 A Happens-Before B,且 B Hap原创 2020-06-05 16:39:55 · 256 阅读 · 0 评论