AQS
诸般世界
这个作者很懒,什么都没留下…
展开
-
001 AQS核心-ReentrantLock使用与底层代码深度分析
谈到并发,不得不谈ReentrantLock;而谈到ReentrantLock,不得不谈AbstractQueuedSynchronizer (AQS);类如其名,抽象的队列式的同步器,AQS定义了一套多线程访问共享资源的同步器框架,许多同步类实现都依赖于它,比如我们之前的课程上讲到的: ReentrantLock/Semaphore/CountDownLatch; ...原创 2019-06-27 11:52:11 · 218 阅读 · 0 评论 -
002 AQS核心-Condition条件判断的使用
我们在使用synchronized的时候,如果需要多线程间进行协作工作则需要Object的wait()和notify()、notifyAll()方法进行配合工作。 那么同样,我们在使用Lock的时候,可以使用一个新的等待/通知的类,它就是Condition。这个Condition一定是针对具体某一把锁的。也就是在只有锁的基础之上才会产生Condition。 ...原创 2019-06-27 14:11:21 · 312 阅读 · 0 评论 -
003 AQS核心-ReentrantReadWriteLock对象锁的使用
读写锁ReentrantReadWriteLock,其核心就是实现读写分离的锁。在高并发访问下,尤其是读多写少的情况下,性能要远高于重入锁。 之前学synchronized、ReentrantLock时,我们知道,同一时间内,只能有一个线程进行访问被锁定的代码,那么读写锁则不同,其本质是分成两个锁,即读锁、写锁。在读锁下,多个线程可以并发的进行访问,但是在写锁的时...原创 2019-06-27 14:34:49 · 161 阅读 · 0 评论 -
004 AQS核心-LockSupport的使用
LockSupport提供park()和unpark()方法实现阻塞线程和解除线程阻塞,实现的阻塞和解除阻塞是基于”许可(permit)”作为关联,permit相当于一个信号量(0,1),默认是0. 线程之间不再需要一个Object或者其它变量来存储状态,不再需要关心对方的状态。 LockSupport不需要在同步代码块里 。所以线程间也不需要维护一个共享的同步...原创 2019-06-27 15:06:35 · 232 阅读 · 0 评论 -
005 AQS-锁优化
•1 避免死锁•2 减小锁的持有时间•3 减小锁的粒度•4 锁的分离•5 尽量使用无锁的操作,如原子操作(Atomic系列类),volatile关键字AQS-源码分析-acquire(int)•acquire(int):(公平锁的实现) 此方法是独占模式下线程获取共享资源的顶层入口。如果获取到资源,线程直接返回,否则进入等待队列,直到获取到资源为止,且整个...原创 2019-06-27 15:44:08 · 108 阅读 · 0 评论