1.管程Java同步的设计思想
管程: 指的是管理共享变量以及对共享变量的操作过程,让他们支持并发.
互斥:同一时刻只允许一个线程访问共享资源:
同步:线程之间如何通信、协作。
MESA模型
在管程的发展史上,先后出现过三种不同的管程模型,分别是Hasen模型、Hoare模型和MESA模型。现在正在广泛使用的是MESA模型![Alt](https://img-home.csdnimg.cn/images/20220524100510.png#pic_center)
管程中引入了条件变量的概念,而且每个条件变量都对应有一个等待队列。条件变量和等待队列的作用是解决线程之间的同步问题。
Java中针对管程有两种实现:
1.一种是基于object的Monitor机制,用于synchronized内置锁的实现
2.一种是抽象队列同步器AQS,用于JUC包下Lock锁机制的实现
2. AQS原理分析
2.1 什么是AQS
java.util.concurrent包中的大多数同步器实现都是围绕着共同的基础行为,比如等待队列、条件队列、独占获取、共享获取等,而这些行为的抽象就是基于AbstractQueuedSynchronizer(简称AQS)实现的,AQS是一个抽象同步框架,可以用来实现一个依赖状态的同步器。
JDK中提供