sychronized与lock的区别

  1. sychronized是java的关键字,而lock是一个类
  2. sychronized获取锁的时候,假设A线程获得锁,B线程等待,若A阻塞,B会一直等待;而lock在这种情况下B会尝试去获取锁
  3. sychronized的锁的状态是无法判断的,而lock是可以判断的
  4. sychronized与lock都是对象锁,都支持重入锁
  5. lock可以实现sychronized不具备的特性,如响应中断,支持超时,非阻塞的获取锁,公平锁,共享锁(读取锁)
  6. lock体系的Condition队列可以有多个(sychronized只有一个等待队列),可以进一步提高效率,减少线程阻塞带来的开销

共享锁和独占锁

共享锁:在同一个时刻,可以有多个线程拥有锁

独占锁: sychronized,在任意的一个时刻,只有一个线程可以拥有此锁

公平锁和非公平锁

公平锁可以保证请求资源在时间上的绝对顺序,而非公平锁有可能会导致其他线程永远都获取不到锁,造成饥饿的现象

公平锁为了保证时间上的绝对顺序,会需要频繁的上下文切换,而非公平锁会减少上下文的切换,性能开销相对较少,可以保证系统更大的吞吐量(吞吐量是指在单位时间内中央处理器(CPU)从存储设备读取->处理->存储信息的量)

读写锁-共享锁的一种实现

读锁共享:多个线程可以同时拿到读锁进行访问,当写线程拿到写锁开始工作时,所有读线程全部阻塞

写锁独占:任意一个时刻,只有一个线程可以拿到写锁

问题来了,到底是用sychronizd还是lock呢?

如果没有特殊的应用场景还是用sychronized锁,因为会使用方便(隐式的加减锁),并且由于sychronized是jvm层面上的实现,在之后的JDK还有对其的优化空间

若要使用公平锁,读写锁,超时获取等特殊场景,才会考虑使用lock

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值