Java并发编程-加锁机制

本文深入探讨Java中保持状态一致性的重要手段——内置锁。详细解析内置锁如何通过原子操作更新状态变量,以及其在同步代码块中的作用。同时,讨论了锁的重入特性,避免子类调用父类同步方法时出现死锁。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

要保持状态的一致性,需要在单个原子操作中更新所有的相关的状态变量。

内置锁:通过内置锁来支持原子性,同步代码块(Synchronized Block)包括两个部分(1)锁的对象引用(2)锁保护的代码块

synchronized(lock){

}

静态的synchronized方法以Class对象作为锁。每个java对象都可以做一个实现同步的锁,这些锁成为内置锁或监视器锁。现场在进入同步代码块之前会自动获得锁,并在执行完退出代码块之后,无论是正常执行完,还是抛异常退出,都会施放锁。获得内置锁的唯一途径就是进入同步代码块。

内置锁相当于一个互斥体,这就意味着只有一个线程能持有这个锁。因此这个同步代码块将以原子的方式执行,其他现场不会干扰到同步代码块中执行。其他线程在试图获得已经正在有线程执行的内置锁的时候,这个线程将等待进入阻塞状态。

内置锁的重入

重入故名思意就是,当线程获得了内置锁,在次进入的时候,会直接进入,而不需要再次获得内置锁。在子类继承父类的同步方法的时候,子类会调用父类的方法。子类对象在调用重新的父类对象方法的时候,得到的都是同一个实例对象的锁,如果锁不是可以重入的,在第二次调用,也就是在调用父类方法的时候,也会试图得到该对象的锁,将会一直被阻塞,将发生死锁。而锁的可以重入的,就避免了死锁。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值