synchronized关键字分析 lq

  1. 简单了解:
    • 对共享资源进行加锁,防止多线程出现并发安全问题。
    • jvm(操作系统)层面上实现的加锁,解锁。
  2. 底层原理实现:
    • monitorenter指令,会尝试获取对象的锁,如果锁的计数器为 0 则表示锁可以被获取,获取后将锁计数器设为 1 也就是加 1。
    • monitorexit指令,将锁计数器设为 0,表明锁被释放。如果获取对象锁失败,那当前线程就要阻塞等待,直到锁被另外一个线程释放为止。
    • 两个指令的本质是:对对象监视器 monitor 的获取。
  3. 使用demo:
    • 对静态方法和代码块使用,是给Class上锁。
    • 对普通方法使用,是给实例对象上锁。
原文地址:https://www.cnblogs.com/rbwbear/p/15566907.html