Java 关键字 Synchronized 与锁优化机制

与 ReentrantLock 区别

ReentrantLock 独有能力

  • 类库层面的同步

  • 等待可中断,持有锁的线程长期不释放锁的时候,等待的线程可以放弃等待。

  • 可实现公平锁 ,按照申请锁的时间顺序获取锁,不过公平锁讲导致其性能的急速下降,明显影响吞吐量。

  • 锁绑定多个条件,一个 ReentrantLock 可以同时绑定多个 Condition 对象,而 synchronized 与 notifyAll 配合之恶能实现一个隐含的条件

为什么保留 synchronized

  • synchronized 是 Java 语法层面的同步,简单清晰
  • Lock 需要主动释放锁
  • JVM 在线程和对象元数据中记录了 synchronized 锁的相关信息,而 Lock 没有

底层实现

  • 当方法内部使用 synchronized ,monitorenter 尝试获取对象的锁,monitorexit 用于释放锁;

第二个 monitorexit 用于处理程序可能发生的异常,由编译器自动生成,在发生异常时处理异常然后释放掉锁。

  • 当 synchronized 修饰方法块时,是根据 ACC_SYNCHRONIZED 标志位去控制同步逻辑
public class Test3 {
   
    public void methodA(){
   
        synchronized (Test3.class){
   
            System.out.println(123);
        }
    }
    public static void main(String[] args) 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值