常见的几种锁

Synchroniezd 

  类中全部是 当修饰在非静态方法时,

    多个线程用一个对象,锁的就是对象this,其他线程是不能进入此对象调用修饰了Synchroniezd的方法,多线程调用普通方法不收影响

    并且多个线程用不同对象,不同对象的锁不同, 不会出现争抢锁

  类中全部是 当修饰在静态方法时

    锁就变成了类锁,不同对象的调用的锁是同一吧,如果此时调用的方法 都被static修饰了 那同一时刻,只有一个方法在进行

  类中 有 普通  静态 非静态修饰的Synchroniezd时

    这个时候 类和对象锁 是两把锁,并不冲突

 

  从字节码层面来看 sync 里 monitorenter与monitorexit 的比例有可能是1:1或1:2

           sync修饰的方法中 有throw new exception 的话  可能会1:1 并且有两个throw

           字节码文件中 flags: 通过ACC_STATIC 来区别sync修饰的是是否是静态方法

 

ReentrantLock

  

  

 

  

 

  

 

posted @ 2022-03-09 19:08  铁柱97  阅读(126)  评论(0)    收藏  举报