MESA模型及AQS

管程,JAVA同步的设计思想

        管程:指的是管理共享变量以及对共享变量的操作过程,让他们支持并发。

        互斥:同一时刻只允许一个线程访问共享资源;

        同步:线程之间如何通信、协作。

        并发2大问题:同步 互斥

MESA模型

当多个线程同时试图进入管程内部时,只允许一个线程进入,其他线程则在入口等待队列中等待。

在线程执行过程中(已进入管程),条件变量A不符合要求,线程被阻塞时会进入条件变量等待队列。

AQS

AbstractQueuedSynchronizer(简称 AQS),AQS是一个抽象同步框架,可以用来实现一个依赖状态的同步器。
JDK中的大部分同步器都是基于AQS实现的

AQS具备的特性:

  • 阻塞等待队列
  • 共享/独占
  • 公平/非公平
  • 可重入
  • 允许中断

AQS定义两种队列

同步等待队列: 主要用于维护获取锁失败时入队的线程。
条件等待队列: 调用await()的时候会释放锁,然后线程会加入到条件队列,调用signal()唤醒的时候会把条件队
列中的线程节点移动到同步队列中,等待再次获得锁。

AQS 定义了5个队列中节点状态:

  • 值为0,初始化状态,表示当前节点在sync队列中,等待着获取锁。
  • CANCELLED,值为1,表示当前的线程被取消;
  • SIGNAL,值为-1,表示当前节点的后继节点包含的线程需要运行,也就是unpark;
  • CONDITION,值为-2,表示当前节点在等待condition,也就是在condition队列中;
  • PROPAGATE,值为-3,表示当前场景下后续的acquireShared能够得以执行;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值