• 阿里P8大牛总结的Java锁机制入门笔记,堪称教科书式天花板


    前言

    锁机制无处不在,锁机制是实现线程同步的基础,锁机制并不是Java锁独有的,其他各种计算机语言中也有着锁机制相关的实现,数据库中也有锁的相关内容。这篇文章就是从Java入手,深入学习、理解Java中的锁机制,提升Java并发编程能力。


     

    1、乐观锁

    乐观锁是一种乐观思想,假定当前环境是读多写少,遇到并发写的概率比较低,读数据时认为别的线程不会正在进行修改(所以没有上锁)。写数据时,判断当前 与期望值是否相同,如果相同则进行更新(更新期间加锁,保证是原子性的)。

    Java中的乐观锁:CAS,比较并替换,比较当前值(主内存中的值),与预期值(当前线程中的值,主内存中值的一份拷贝)是否一样,一样则更新,否则继续进行CAS操作。

    如下图所示,可以同时进行读操作,读的时候其他线程不能进行写操作。

    2、悲观锁

    3、自旋锁

    4、可重入锁(递归锁)

    5、读写锁

    6、公平锁

    7、非公平锁

    8、共享锁

    9、独占锁

    10、重量级锁

    11、轻量级锁

    12、偏向锁

    13、分段锁

    14、互斥锁

    15、同步锁

    16、死锁

    17、锁粗化

    18、锁消除

    19、synchronized

    20、Lock和synchronized的区别

    21、ReentrantLock 和synchronized的区别

    ReentrantLock是Java中的类 : 继承了Lock类,可重入锁、悲观锁、独占锁、互斥锁、同步锁。

    划重点

    相同点:

    1.主要解决共享变量如何安全访问的问题

    2.都是可重入锁,也叫做递归锁,同一线程可以多次获得同一个锁,

    3.保证了线程安全的两大特性:可见性、原子性。

    不同点:

    • 1.ReentrantLock 就像手动汽车,需要显示的调用lock和unlock方法,synchronized 隐式获得释放锁。

    • 2.ReentrantLock 可响应中断, synchronized 是不可以响应中断的,ReentrantLock 为处理锁的不可用性提供了更高的灵活性

    • 3.ReentrantLock 是 API 级别的, synchronized 是 JVM 级别的

    • 4.ReentrantLock 可以实现公平锁、非公平锁,默认非公平锁,synchronized 是非公平锁,且不可更改。

    • 5.ReentrantLock 通过 Condition 可以绑定多个条件

    总结

    为了不影响大家的阅读体验,这篇Java锁的学习笔记已经为大家打包好了,需要的小伙伴点赞+转发,私信我 即可获取,希望这份学习笔记可以帮助大小伙伴愉快的突破对Java锁的理解和入门进阶。

  • 相关阅读:
    Docker学习(5)—— 在Docker上安装软件
    ​ yarn通过日志聚合将作业日志存储在HDFS中
    优先级队列(堆)
    MySql字符串拆分实现split功能(字段分割转列、转行)
    基于单片机的水位检测系统仿真设计
    高项 08 项目质量管理
    ES系列十二、ES的scroll Api及分页实例
    【华为OD机试真题 JS】求最多可以派出多少支团队
    基于googlenet网络的动物种类识别算法matlab仿真
    AR道具贴纸SDK,创新技术解决方案
  • 原文地址:https://blog.csdn.net/Candyz7/article/details/128076682