Monitor机制

Monitor机制

monitor概要

Java 语言实现 monitor 机制,属于编译器的工作。

monitor机制需要3个元素配合使用,分别是:

  • 临界区
  • monitor 对象及锁
  • 条件变量以及定义在 monitor 对象上的 wait,signal 操作

使用monitor机制让互斥进入临界区,用monitor 对象来保存被阻塞的线程,由于 monitor 机制本质上是基于 mutex 这种基本原语的,所以 monitor object 还必须维护一个基于 mutex 的锁。而条件变量的引入是为了能够在适当的时候阻塞和唤醒 进程/线程,由这个条件变量来确定什么时候是“适当的时候”。条件变量的定义有很大的自主性

monitor实现

monitor是操作系统提出的一种高级原语。monitor在java的具体实现是依靠synchronized 关键字来修饰实例方法、类方法以及代码块,被 synchronized 关键字修饰的方法、代码块,就是 monitor 机制的临界区。

synchronized关联的对象就是 monitor object。monitor object 充当着维护 mutex以及定义 wait/signal API 来管理线程的阻塞和唤醒的角色。

java.lang.Object 类定义了 wait(),notify(),notifyAll() 方法,这些方法的具体实现,依赖于一个叫 ObjectMonitor 模式的实现,这是 JVM 内部基于 C++ 实现的一套机制。

当一个线程要获取object的锁时,会进入EntrySet中进行等待,如果线程获得了锁,成为了锁的owner后。当程序逻辑中,不满足条件时而无法继续执行下去时(例如生产者发现队列已满或者消费者发现队列为空),该线程可以通过调用 wait 方法将锁释放,进入 wait set 中阻塞进行等待,其它线程在这个时候有机会获得锁,,去干其它的事情,从而使得之前不满足的外部条件成立,这样先前被阻塞的线程就可以重新进入 EntrySet 去竞争锁。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值