java各锁的区别

synchronized : 1.可重入锁(同一个线程可申请同一把锁多次),当锁的对象是同一个时,多个方法可以相互调用 2.阻塞式锁,当线程A获取到锁时,且A线程此时进入睡眠状态,线程B会一直等待A线程释放锁,此时线程B会进入wait状态,此时进入wait状态的B线程不可打断wait状态.3.超出当前域会自动释放当前锁 4.重量级锁(锁内存总线方式) 5.原理为缓存一致性协议(MESI协议) : 当CPU写数据时,如果发现操作的变量是共享变量,即在其他CPU中也存在该变量的副本,会发出信号通知其他CPU将该变量的缓存行置为无效状态,因此当其他CPU需要读取这个变量时,发现自己缓存中缓存该变量的缓存行是无效的,那么它就会从内存重新读取 6.synchronized各线程之间锁状态都为互斥的,就是说当一个线程获取资源并加锁后,其它线程不能对加锁的资源读或者写,因为是锁内存总线的所以性能低下

对象头 : HotSpot虚拟机的对象头分为两部分信息,第一部分用于存储对象自身运行时数据,如哈希码、GC分代年龄等,这部分数据的长度在32位和64位的虚拟机中分别为32位和64位。官方称为Mark Word。另一部分用于存储指向对象类型数据的指针,如果是数组对象的话,还会有一个额外的部分存储数组长度,对象头中存放当前对象的锁状态

偏向锁 : 域标记锁修饰后,如果没有发生数据争抢,就将当前对象的锁状态标记为偏向锁,提高性能

轻量级锁 : 如果当前线程获取到锁之后被标记为偏向锁之后再次进入同步代码域,当前线程继续存活就将当前对象中的锁状态标记为轻量级锁

可重入锁 : 什么是可重入锁,不可重入锁呢?"重入"字面意思已经很明显了,就是可以重新进入。可重入锁,就是说一个线程在获取某个锁后,还可以继续获取该锁,即允许一个线程多次获取同一个锁。比如synchronized内置锁就是可重入的,如果A类有2个synchornized方法method1和method2&

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值