java几种锁的摘录

java常见的锁实例

  1. 乐观锁/悲观锁
    CAS乐观锁,synchronized悲观锁
  2. 独享锁/共享锁
    synchronize是独享锁,ReadWriteLock的读锁是共享锁,写锁是独享锁
  3. 互斥锁/读写锁
    互斥锁是ReentrantLock,读写锁就是ReadWriteLock
  4. 可重入锁
    ReentrantLock,synchronized
  5. 公平锁/非公平锁
    ReentrantLock通过构造函数决定是否为公平锁,而synchronized不是AQS机制的所以没办法成为公平锁
  6. 分段锁
    主要是为了细化锁粒度,如ConcurrentHashMap的分段锁被称为Segment就是典型的分段锁,内部有个Entry数组,数组的每个元素又是一个链表,同时又是一个ReentrantLock
  7. 偏向锁/轻量级锁/重量级锁
    这三种锁是对于synchronized来说的,
    • 偏向锁是指一段同步代码一直被一个线程所访问,那个该线程就自动获取所,降低了获取锁的代价
    • 轻量级锁是指当锁是偏向锁的时候,被另一个线程所访问,偏向锁就会升级为轻量级锁,其他线程会自旋尝试获取锁,不会阻塞,提高性能,但是同时也会浪费cpu
    • 重量级锁是指当锁为轻量级锁的时候,另一个线程虽然是自旋,但是自旋不会一直自旋下去,当自旋一定次数的时候,还没获取到锁,就会进入阻塞,该锁膨胀为重量级锁,重量级锁会让他申请的线程进入阻塞状态,性能降低
  8. 在java中,自旋锁是指尝试获取锁的线程不会立即阻塞,而是采取循环的方式尝试获取锁,这样的好处是减少线程的上下文切换的消耗,但是缺点是循环会消耗cpu
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值