Java Thread Monitor

Thread Monitor Introduction

### JavaMonitor 机制工作原理 #### 监视器(Monitor)概述 每个 Java 对象都有一个与之关联的监视器(Monitor),当使用 `synchronized` 关键字给对象加锁时,实际上是在操作这个对象上的监视器。监视器用于控制对临界区代码段的访问,确保同一时刻只有一个线程能够执行被保护的代码部分[^4]。 #### Mark Word 结构变化 在未锁定状态下,Mark Word 存储的是对象的元数据信息,比如哈希码、分代年龄等。一旦某个线程尝试获取对象锁并成功,则会修改 Mark Word 的内容,使其指向对应的 Monitor 对象地址。此时其他试图获得相同对象锁的线程将会进入等待状态直到前一线程释放锁为止[^1]。 #### 获取和释放锁的过程 - **轻量级锁**:最初调用 synchronized 方法或代码块时,JVM 尝试快速地将当前线程设为持有者而无需真正创建 Monitor 实例。这一步骤称为偏向锁,在大多数情况下能显著提高性能。 - **膨胀成重量级锁**:如果存在竞争情况即有另一个线程也想占有同一个锁,则原先持有的轻量级锁会被升级转换为重量级锁形式,并正式建立完整的 Monitor 数据结构。这时所有后续请求该锁的操作都将遵循标准的竞争流程处理。 ```java public class Counter { private int count; public void increment() { synchronized(this) { // 此处触发monitor机制 this.count++; } } public static void main(String[] args) throws InterruptedException { Counter counter = new Counter(); Thread t1 = new Thread(() -> { for(int i=0;i<1000;++i){ counter.increment(); } }); Thread t2 = new Thread(() -> { for(int i=0;i<1000;++i){ counter.increment(); } }); t1.start(); t2.start(); t1.join(); t2.join(); System.out.println(counter.getCount()); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值