4.并发中的各种锁概念

目录

  • 概述
  • 锁分类
    • 按上锁方式划分
    • 按特性划分
      • 悲观锁/乐观锁
      • 重入锁/不可重入锁
      • 公平锁/非公平锁
      • 独享锁/共享锁
    • 其它
      • 自旋锁
      • 分段锁
      • 无锁/偏向锁/轻量级锁/重量级锁
  • 结束

概述

java 锁分类,虽是概念,很常见。

锁分类

按上锁方式划分

关键字 解释
隐式锁 synchronized 不需要显示加锁和解锁
显示锁 juc包中提供的锁 需要显示加锁和解锁

按特性划分

悲观锁/乐观锁

按照线程在使用共享资源

关键字 解释
悲观锁 juc锁,synchronized
乐观锁 cas 关系型数据库的版本号机制

重入锁/不可重入锁

按照同一个线程是否可以重复获取同一把锁,划分为重入锁和不可重入锁

  • 重入锁:ReentrantLock、synchronized
  • 不可重入锁:不可重入锁,与可重入锁相反,线程获取锁之后不可重复获取锁,重复获取会发生死锁。

公平锁/非公平锁

**按照多个线程竞争同一锁时需不需要排队,能不能插队,**划分为公平锁和非公平锁。

独享锁/共享锁

按照多个线程能不能同时共享同一个锁,锁划分为独享锁和共享锁。

独享锁和共享锁是不能同时存在的。

  • 独享锁:独享锁也叫排他锁,synchronized、ReentrantLock、ReentrantReadWriteLock的WriteLock写锁
  • 共享锁:ReentrantReadWriteLock的ReadLock读锁

其它

自旋锁

实现:CAS

分段锁

实现:ConcurrentHashMap

无锁/偏向锁/轻量级锁/重量级锁

  • 这四个锁是synchronized独有的四种状态,级别从低到高依次是:无锁、偏向锁、轻量级锁和重量级锁
  • 它们是jvm为了提高synchronized锁的获取与释放效率而做的优化
  • 四种状态会随着竞争的情况逐渐升级,而且是不可逆的过程,即不可降级。

结束

并发中的各种锁概念,至此就结束了,如有疑问,欢迎评论区留言。

你可能感兴趣的:(并发编程,并发,各种锁概念,总结)