AQS
不会汪汪的猫咪
可以称得上是做互联网金融的开发工程师,会点Java,会点Python
展开
-
深入浅出理解锁之—— AbstractQueuedSynchronizer
并发编程中AQS的深入理解前一段时间学习了AQS的代码,对java中的锁有了新的理解,用这篇博客来记录下。大概分为以下几个部分。一,基础知识——LockSupport二,自己设计一个锁三,由刚才写的锁转变成一个公平锁四,看看我们写的和ReentrantLock的公平不公平锁的区别五,看看AQS的代码实现六,AQS的其他实现类...原创 2018-12-08 21:24:24 · 436 阅读 · 0 评论 -
AQS理解之三,由刚才写的锁转变成一个公平锁
AQS理解之三,由刚才写的锁转变成一个公平锁在第二节里我们实现了一个不公平的锁,之所以说它不公平,主要是因为加锁后解锁时,阻塞的其他线程获取到的锁的可能是随机的,并不是按照顺序来确定的,如果要转变为公平锁,我们应该要记录这个进入的顺序,并在解锁时必须满足是第一个阻塞等待的线程才解锁。其次,在上一节我们实现的锁是一个自旋阻塞等待的,这样的话线程还是在继续白白工作的,我们在这里也进行优化,使用Lo...原创 2018-12-09 10:37:02 · 211 阅读 · 0 评论 -
AQS理解之二,自己设计一个锁
AQS理解之二,自己设计一个锁一,实现锁的条件首先我们想一想,如果我们自己实现一个类似于java中的锁,我们可能需要哪些必要的东西:1,记录是哪个线程持有了锁。2,如果有一个变量代表加锁,A线程加锁,需要让B线程能看见,这里需要可见性,所以我们可能要用到volatile变量。3,对变量的操作应该是一个原子操作。二,实现首先我们定义一个类,这个类需要有一个持有锁的变量。这里使用owne...原创 2018-12-08 23:33:41 · 296 阅读 · 0 评论 -
AQS理解之一,基础知识——LockSupport
AQS理解之一,基础知识——LockSupportLockSupport类位于java.util.concurrent包下。顾名思义,就是一个实现锁的辅助类。来看下他的类结构:其中的变量都是通过UNSAFE类来赋值,代码如下:private static final sun.misc.Unsafe UNSAFE; private static final long parkBl...原创 2018-12-08 21:55:11 · 803 阅读 · 0 评论 -
AQS理解之四—看看我们写的和 ReentrantLock 的公平不公平锁的区别
AQS理解之四,看看我们写的和 ReentrantLock 的公平不公平锁的区别首先看下ReentrantLock的lock和unlock方法。不公平锁版本lock方法final void lock() { if (compareAndSetState(0, 1)) setExclusiveOwnerThread(Thread.currentThrea...原创 2018-12-09 11:34:32 · 630 阅读 · 0 评论 -
AQS理解之五—并发编程中AQS的理解
AQS理解之五—并发编程中AQS的理解首先看下uml类图:AbstractOwnableSynchronizer 这个类定义是提供一个创建锁的基础,设置一个排它线程,帮助控制和监控访问。先看下AbstractQueuedSynchronizer 这个类的内部变量。Head和tail是两个Node变量。int型的state。long型的spinForTimeoutThreshold...原创 2018-12-09 11:45:09 · 565 阅读 · 0 评论 -
AQS理解之六,AQS的其他实现类
AQS理解之六,AQS的其他实现类1,ThreadPoolExecutor 中的 Worker 类protected boolean tryAcquire(int unused) { if (compareAndSetState(0, 1)) { setExclusiveOwnerThread(Thread.currentThread()); ...原创 2018-12-10 13:44:05 · 1031 阅读 · 0 评论 -
AQS理解之七——AQS中的条件队列
AQS中的条件队列在AQS中还实现了一个类,ConditionObject,它实现了Condition接口,实现一个绑定在锁上的条件队列。先看看他的uml图。主要方法它实现了Condition接口,主要实现的方法是await和signal以及它们的带时间参数方法。条件队列的一般用法:当满足某个条件时,通知正在等待这个条件的线程(signal)当需要满足某个条件才能继续执行时,进行阻...原创 2018-12-10 16:58:42 · 2578 阅读 · 0 评论