AQS源码解读(ReentrankLock的公平锁和非公平锁)
- 构建Debug代码:
1 package com.hl.interview.lock;
2
3 import java.util.Scanner;
4 import java.util.concurrent.locks.Lock;
5 import java.util.concurrent.locks.LockSupport;
6 import java.util.concurrent.locks.ReentrantLock;
7
8 /**
9 * @author Hl
10 * @create 2021/2/20 9:36
11 */
12 public class AQS {
13 static Lock lock = new ReentrantLock();
14 volatile static int flag = 0;
15
16 public static void main(String[] args) {
17 Scanner scanner = new Scanner(System.in);
18 Thread a = new Thread(() -> {
19 lock.lock();
20 try {
21 System.out.println(Thread.currentThread().getName() + "先占用了");
22 LockSupport.park();
23 } finally {
24 lock.unlock();
25 }
26 }, "A");
27
28 Thread b = new Thread(() -> {
29 LockSupport.park();
30 // 下面是断点处
31 System.out.println("开始B线程");
32 lock.lock();
33 try {
34 System.out.println(Thread.currentThread().getName() + "抢占");
35 LockSupport.park();
36 } finally {
37 lock.unlock();
38 }
39 }, "B");
40
41 Thread c = new Thread(() -> {
42 LockSupport.park();
43 // 下面是断点处
44 System.out.println("开始C线程");
45 lock.lock();
46 try {
47 System.out.println(Thread.currentThread().getName() + "抢占");
48 LockSupport.park();
49 } finally {
50 lock.unlock();
51 }
52 }, "C");
53 a.start();
54 b.start();
55 c.start();
56 System.out.print("请输入一个数:\t" );
57 while (scanner.hasNextInt()) {
58 System.out.print("请输入一个数:\t" );
59 flag = scanner.nextInt();
60 System.out.println();
61 if (flag == 1) {
62 System.out.println("释放了A线程");
63 LockSupport.unpark(a);
64 } else if (flag == 2) {
65 System.out.println("释放了B线程");
66 LockSupport.unpark(b);
67 } else if (flag == 3) {
68 System.out.println("释放了C线程");
69 LockSupport.unpark(c);
70 } else {
71 System.out.println("退出了程序");
72 break;
73 }
74 }
75 }
76 } - Debug所有断点处
- 流程图,个人理解,有些地方理解的不太透彻望包涵
AQS源码解读(ReentrankLock的公平锁和非公平锁)的更多相关文章
- AQS 源码解读之加锁篇
以 ReentrantLock 创建的非公平锁为基础,进行 AQS 全流程的分析. 分析 demo 一共有 A.B.C 三个线程. public class AQSDemo { // 带入一个银行办理 ...
- AbstractQueuedSynchronizer 源码解读(转载)
转载文章,拜读了一下原文感觉很不错,转载一下,侵删 链接地址:http://objcoding.com/2019/05/05/aqs-exclusive-lock/ Java并发之AQS源码分析(一) ...
- java架构之路(多线程)AQS之ReetrantLock显示锁的使用和底层源码解读
说完了我们的synchronized,这次我们来说说我们的显示锁ReetrantLock. 上期回顾: 上次博客我们主要说了锁的分类,synchronized的使用,和synchronized隐式锁的 ...
- 死磕 java同步系列之ReentrantLock源码解析(一)——公平锁、非公平锁
问题 (1)重入锁是什么? (2)ReentrantLock如何实现重入锁? (3)ReentrantLock为什么默认是非公平模式? (4)ReentrantLock除了可重入还有哪些特性? 简介 ...
- AQS源码详细解读
AQS源码详细解读 目录 AQS源码详细解读 基础 CAS相关知识 通过标识位进行线程挂起的并发编程范式 MPSC队列的实现技巧 代码讲解 独占模式 独占模式下请求资源 独占模式下的释放资源 共享模式 ...
- AQS源码深入分析之独占模式-ReentrantLock锁特性详解
本文基于JDK-8u261源码分析 相信大部分人知道AQS是因为ReentrantLock,ReentrantLock的底层是使用AQS来实现的.还有一部分人知道共享锁(Semaphore/Count ...
- AQS源码探究之竞争锁资源
AQS源码探究---竞争锁资源 我们进入ReentrantLock源码中查看其内部类 Sync 对AQS进行扩展公共方法并定义抽象方法的抽象类 FaireSync 实现公平锁的AQS的实现类 UnFa ...
- JUC锁:核心类AQS源码详解
目录 1 疑点todo和解疑 2 AbstractQueuedSynchronizer学习总结 2.1 AQS要点总结 2.2 细节分析 2.2.1 插入节点时先更新prev再更新前驱next 2.2 ...
- 硬核剖析Java锁底层AQS源码,深入理解底层架构设计
我们常见的并发锁ReentrantLock.CountDownLatch.Semaphore.CyclicBarrier都是基于AQS实现的,所以说不懂AQS实现原理的,就不能说了解Java锁. 上篇 ...
随机推荐
- POJ2932 Coneology【圆扫描线】
POJ2932 Coneology 题意: 给出一些不相交的圆,问有多少个圆不被其他圆包围 题解: 扫描线,把所有圆的左边界和右边界放到\(vector\)里排序,遍历到圆左边界的时候判断是否满足条件 ...
- 【poj 1284】Primitive Roots(数论--欧拉函数 求原根个数){费马小定理、欧拉定理}
题意:求奇质数 P 的原根个数.若 x 是 P 的原根,那么 x^k (k=1~p-1) 模 P 为1~p-1,且互不相同. (3≤ P<65536) 解法:有费马小定理:若 p 是质数,x^( ...
- int和longlong的范围
unsigned int 0-4294967295 (10位数,4e9) int -2147483648-2147483647 (10位 ...
- hdu 6863 Isomorphic Strings 哈希+求公因子
题意: t组输入,每组数据输入一个整数n,代表字符串长度.下面再输入一个字符串 你需要判断这个字符串能不能分成大于1段,且这些段的最小表示法是一样的 例如:abccab,它可以分成2段,分别是abc和 ...
- poj3252 Round Numbers (数位dp)
Description The cows, as you know, have no fingers or thumbs and thus are unable to play Scissors, P ...
- 【Azure Redis 缓存】使用Python代码获取Azure Redis的监控指标值 (含Powershell脚本方式)
问题描述 通过Metrics监控页面,我们能得知当前资源(如Redis)的运行情况与各种指标.如果我们需要把指标下载到本地或者生成JSON数据导入到第三方的监控平台呢?Azure是否可以通过Pytho ...
- 弹性计算服务(Elastic Compute Service) / 云服务器 ECS
计费方式选择 多种可选择计算费用的方式,可以包年包月,按流量计费,按资源规格计费(本文第四点)等等 地域位置选择 地域:地域指的是 ECS 实例所在的物理位置 地域位置如何选择: 根据访问业务的用户比 ...
- kmp--考研写法
首先是模式串匹配: #include<iostream> #include<stdlib.h> using namespace std; #define maxn 100000 ...
- 买车交税 All In One
中国买车交税 All In One 消费税 增值税 车辆购置税 车船税 关税 refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才可以访问! 原 ...
- JavaScript for, for...in, for...of, for-await...of difference All In One
JavaScript for, for...in, for...of, for-await...of difference All In One for for...in for...of for-a ...