
Concurrent
寒武没有纪
这个作者很懒,什么都没留下…
展开
-
多线程-单生产单消费模型
创建资源对象,提供保存和取出方法(使用synchronized代码块实现)/** * Created by shaoqinghua on 2018/5/3. * 定义一个负责保存和取出的资源类 */public class Resource { /** * 定义成员变量,充当保存和取出的容器 */ private Object[] objs = n...原创 2018-05-03 22:48:39 · 262 阅读 · 0 评论 -
Semaphore源码解析
Semaphore 用来控制同时访问特定资源的线程数量,使用 AQS 状态值 state 代表许可数 permits。构造方法参数:permits:许可数fair:是否公平信号量public Semaphore(int permits) { sync = new NonfairSync(permits);}public Semaphore(int permits, boo...原创 2018-10-10 17:39:16 · 192 阅读 · 0 评论 -
CyclicBarrier源码解析
CyclicBarrier 基于可重入锁 ReentrantLock 和 Condition 共同实现。parties:设置多少个线程或者任务等待至 barrier 状态barrierAction:设置指定线程全部到达 barrier 状态时会执行的任务public CyclicBarrier(int parties) {}public CyclicBarrier(int part...原创 2018-10-10 17:30:11 · 153 阅读 · 0 评论 -
CountDownLatch源码解析
CountDownLatch 通过递减 AQS 同步状态 state 来实现闭锁的控制。// CountDownLatchpublic CountDownLatch(int count) { if (count < 0) throw new IllegalArgumentException("count < 0"); this.sync = new Sync(cou...原创 2018-10-10 17:20:54 · 154 阅读 · 0 评论 -
ReentrantReadWriteLock源码解析
ReentrantReadWriteLock 使用一个 32 位的 int 类型来表示锁被占用的线程数,高 16 位用来表示读锁占有的线程数量,低 16 位表示写锁被同一个线程申请次数。// 读锁占用位数高16位static final int SHARED_SHIFT = 16;// 增加读锁数量static final int SHARED_UNIT = (1 <<...原创 2018-10-10 17:10:09 · 149 阅读 · 0 评论 -
ReentrantLock源码解析
ReentrantLock支持公平锁和非公平锁,默认构造使用非公平锁实现。public ReentrantLock() { sync = new NonfairSync();}public ReentrantLock(boolean fair) { sync = fair ? new FairSync() : new NonfairSync();}首先查看获取锁 lo...原创 2018-10-10 16:57:18 · 149 阅读 · 0 评论 -
AbstractQueuedSynchronizer ConditionObject解析
分析过程// condition队列第一个节点private transient Node firstWaiter;// condition队列最后一个节点private transient Node lastWaiter;// 重新中断退出等待private static final int REINTERRUPT = 1;// 抛出中断异常退出等待private stati...原创 2018-09-29 16:20:37 · 1623 阅读 · 0 评论 -
AbstractQueuedSynchronizer源码解析
AQSAbstractQueuedSynchronizer 队列同步器,是 JDK1.5 提供的一个基础框架,用于构建依赖于先进先出(FIFO)等待队列的阻塞锁以及相关同步器(包括 ReentrantLock、CountDownLatch、Semaphore 等),它使用一个 int 类型的成员变量 state 表示同步状态,同步器提供了一系列模板方法来访问修改同步状态:getState():...原创 2018-09-27 15:14:33 · 274 阅读 · 0 评论 -
多线程-synchronized实现原理分析
作者:EnjoyMoving,转自:https://zhuanlan.zhihu.com/p/29866981锁的内存语义synchronized的底层是使用操作系统的mutex lock实现的。内存可见性:同步快的可见性是由“如果对一个变量执行lock操作,将会清空工作内存中此变量的值,在执行引擎使用这个变量前需要重新执行load或assign操作初始化变量的值”、“对一个变量执行...转载 2018-05-15 21:14:58 · 547 阅读 · 0 评论 -
锁机制-自旋锁、偏向锁、轻量级锁、重量级锁
自旋锁如果持有锁的线程能在很短时间内释放锁资源,那么那些等待竞争锁的线程就不需要做内核态和用户态之间的切换进入阻塞挂起状态,只需让线程执行一个忙循环(自旋),等持有锁的线程释放锁后即可立即获取锁,这样就避免用户线程和内核的切换的消耗。 自旋等待不能代替阻塞,自旋等待本身虽然避免了线程切换的开销,但是要占用处理器时间,因此如果锁被占用时间很短,自旋等待效果就会非常好,但如果锁被占用的时间很长,...原创 2018-05-14 22:01:01 · 1339 阅读 · 0 评论 -
使用JConsole和jstack检测分析死锁
JConsole首先启动死锁测试demo程序在cmd中运行jconsole打开图形化界面工具选择我们需要分析的进程进行连接 选择线程选项,点击底部检测死锁功能 查看死锁线程详情 线程1想获取的锁被线程0所持有,线程0想获取的锁被线程1持有,两个线程都在互相等待获取被对方所持有的锁资源,因此造成了死锁。Jstack首先通过jps查看当前运行的Java进程...原创 2018-05-19 16:35:19 · 2393 阅读 · 0 评论 -
多线程-单例模式安全问题
作者:孤独烟,转自:http://rjzheng.cnblogs.com/饿汉式这种其实大家都懂,不多说,上代码。package singleton;public class Singleton1 { private static Singleton1 instance = new Singleton1(); private Singleton1 (){} ...转载 2018-05-05 17:53:18 · 250 阅读 · 1 评论 -
Exchanger源码解析
Exchanger(交换者)是一个用于线程间协作的工具类。Exchanger 用于进行线程间的数据交换。它提供一个同步点,在这个同步点,两个线程可以交换彼此的数据。这两个线程通过exchange 方法交换数据,如果第一个线程先执行 exchange() 方法,它会一直等待第二个线程也执行 exchange 方法,当两个线程都到达同步点时,这两个线程就可以交换数据,将本线程生产出来的数据传递给对方。...原创 2018-10-10 17:45:18 · 438 阅读 · 0 评论