锁/线程/为什么项目中代码很少有锁的出现

CountDownLatch的await,countDown与notify,wait等区别???

因为堆和方法区是被所有线程共享的,因此java程序需要为多线程访问的这两类数据进行协调。保存在堆中的实例变量和保存在方法区中的类变量。虚拟机为每一个对象和类都关联一个锁,类锁实际上是对象锁实现,锁住一个类的时候实际上锁的是那个类的Class实例对象。

java中可以使用 synchronized 来实现多线程下对象的同步访问,为了获得更加灵活使用场景、高效的性能,java还提供了Lock接口及其实现类ReentrantLock和读写锁 ReentrantReadWriteLock。(java的锁机制实现方式仅此两种,锁机制的产生是线程共享堆和方法区催生的,但锁机制的实现只能由java对象自己内部控制,跟线程无关,任何一个线程无法控制对象锁,无法改变对象锁状态)

为什么项目中代码很少有锁的出现?

因为锁的出现场景是多个线程共用一个对象时

 

synchronized和lock的区别:

synchrozined其实就是锁级别高的锁,连读都锁起来了。lock可以自己定义是否把读锁起来。

 

JVM为每个对象和类关联一个锁,类锁其实也是对象锁实现,锁住一个类的时候其实锁的是Class类的实例对象。JVM会维护一个计数器记录对象被加了多少次锁,没有被锁的对象是0,一个线程第一次获得锁的时候计数器加1,只有已经拥有这个对象锁的线程才能对该对象继续加锁。每当线程释放锁一次,计数器就减1

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值