一、概念 1. AQS(AbstractQueuedSynchronizer),抽象队列式同步器,在java.util.concurrent.locks(JUC)包下,是除了Java自带的synchronized关键字之外的锁机制 2. AQS机制:如果请求的资源被其他线程锁定,将当前线程加入等待队 ...
分类:
编程语言 时间:
2019-10-06 09:27:54
阅读次数:
92
一. 读写锁是怎么实现的? 继承AQS,然后通过将AQS中的state转化为二进制,分为高16位和低16位来区分。高16位表示读状态,低16位为写状态。 二. 解析表示方式(高低16位) 假设此时state是数值S a.写锁 在判断写锁时,通过 K=S&0X0000FFFF, 将高位全部抹掉,此时只 ...
分类:
其他好文 时间:
2019-09-30 21:41:49
阅读次数:
111
2018.08.29 13:49:42字数 478阅读 155 2018.08.29 13:49:42字数 478阅读 155 AQS核心思想 如果被请求的共享资源空闲,则将当前请求线程设置为有效的工作线程,并将共享资源设置为锁定状态。如果被请求的共享资源被占用,那么就需要一套线程阻塞等待以及唤醒机 ...
分类:
其他好文 时间:
2019-09-30 18:12:03
阅读次数:
83
ReentrantLock内部包含了一个AQS对象,也就是AbstractQueuedSynchronizer类型的对象。这个AQS对象就是ReentrantLock可以实现加锁和释放锁的关键性的核心组件。 线程A,B尝试进行加锁的过程: CountDownLatch应用场景:并行计算的时候,如果某 ...
分类:
其他好文 时间:
2019-09-29 23:50:46
阅读次数:
103
AQS解析 一、简介 Provides a framework for implementing blocking locks and related synchronizers (semaphores, events, etc) that rely on first in first out (F ...
分类:
其他好文 时间:
2019-09-23 22:23:02
阅读次数:
108
AQS的几个同步组件 CountDownLatch 一个线程或多个线程一直等待,直到其他线程执行的操作完成才继续执行。 应用:并行计算。 计数器是不能重计的,计数值不能往上加,类似操作只有一次。 使用时首先new一个countDownLatch,构造方法中放入计数,然后在一个线程中调用await方法 ...
分类:
其他好文 时间:
2019-09-19 10:40:00
阅读次数:
89
`package java.util.concurrent.locks;` 基本介绍 AQS中可供子类重写的钩子操作 方法名称 | 描述 : :|: : boolean tryAcquire(int arg) | 独占式获取同步状态,成功返回true,失败返回false。 boolean tryRe ...
分类:
其他好文 时间:
2019-09-18 11:35:27
阅读次数:
111
java中锁主要分为两类: 1、 synchronized 关键字修饰的锁 2、 在同步容器JUC中 ReentrantLock(可重入性) 关键字修饰的锁 ReenTrantLock 和 synchronized 的区别: 1、可重入性 ,两者都是一样的,当有线程进入锁,计数器就加1,当计数器为0 ...
分类:
其他好文 时间:
2019-09-13 17:44:56
阅读次数:
222
CountDownLatch 实例代码: semaphore : 控制并发访问的线程个数 通过提供同步机制,来控制当前访问的线程个数 tryacquire: 尝试获取可用资源,如果获取不到就丢弃 cyclicBarrier: 使用场景和countDownLatch的使用场景很类似,但是可以循环的使用 ...
分类:
其他好文 时间:
2019-09-12 09:24:40
阅读次数:
66
J.U.C 简介 Java.util.concurrent 是在并发编程中比较常用的工具类,里面包含很多用来在并发场景中使用的组件。比如线程池、阻塞队列、计时器、同步器、并发集合等等。并发包的作者是大名鼎鼎的 Doug Lea。我们在接下来剖析一些经典的比较常用的组件的设计思想。 Lock Lock ...
分类:
其他好文 时间:
2019-09-09 22:48:25
阅读次数:
130