Java多线程之多种锁和阻塞队列

 更新时间:2021年06月09日 15:56:58   作者:若能绽放光丶  
今天带大家学习的是Java多线程的相关知识,文章围绕着java多种锁和阻塞队列展开,文中有非常详细的介绍,需要的朋友可以参考下

一、悲观锁和乐观锁

1.1. 乐观锁

顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。

乐观锁适用于多读的应用类型,乐观锁在Java中是通过使用无锁编程来实现,最常采用的是CAS算法,Java原子类中的递增操作就通过CAS自旋实现的。

CAS全称 Compare And Swap(比较与交换),是一种无锁算法。在不使用锁(没有线程被阻塞)的情况下实现多线程之间的变量同步。java.util.concurrent包中的原子类就是通过CAS来实现了乐观锁。

1.2. 悲观锁

总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁。

二、公平锁和非公平锁

在这里插入图片描述
在这里插入图片描述

三、可重入锁(递归锁)

先看官网的解释翻译后的

在这里插入图片描述

看不太懂,那么我们结合一下下面的案例就行了。

在这里插入图片描述

两个同步方法01和02,都是被锁住的,当我们运行01的时候,一旦获取的01的锁,那么02的锁也可以被自动获取。

在这里插入图片描述

补充:lock和unlock只要配对使用,就不会有问题。

四、自旋锁

在这里插入图片描述

其实CAS底层就是用 Unsafe类+CAS(自旋) 实现的,CAS底层有一个do while语句,循环比较在主存中的值是否等于期望值。

五、独占锁(写)/共享锁(读)

在这里插入图片描述

读归读,写归写,读和写可以同时进行。

六、什么是阻塞队列?

队列中放着数据,一个线程生产,一个线程获取。

在这里插入图片描述
在这里插入图片描述

七、阻塞队列(BlockingQueue)

在这里插入图片描述

阻塞队列有多少实现类呢?

在这里插入图片描述

到此这篇关于Java多线程之多种锁和阻塞队列的文章就介绍到这了,更多相关java多种锁和阻塞队列内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot整合websocket实现即时通信聊天

    SpringBoot整合websocket实现即时通信聊天

    这篇文章主要介绍了SpringBoot整合websocket实现即时通信聊天,实时通信是一个实时通信系统,允许两人或多人使用网络实时的传递文字消息、文件、语音与视频交流,需要的朋友可以参考下
    2022-05-05
  • Mybatis参数处理的几种方法小结

    Mybatis参数处理的几种方法小结

    在Mybatis中如何处理参数是一个非常重要的环节,本文将详细介绍 Mybatis 的参数处理机制,包括传入参数和返回参数的处理方式,具有一定的参考价值,感兴趣的可以了解一下
    2023-08-08
  • Java编程复用类代码详解

    Java编程复用类代码详解

    这篇文章主要介绍了Java编程复用类代码详解,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • springmvc mybatis集成配置示例

    springmvc mybatis集成配置示例

    本文主要介绍springmvc+mybatis集成配置,这里提供了实例代码,和简单说明,有需要的小伙伴可以参考下
    2016-09-09
  • Spring如何自定义加载配置文件(分层次加载)

    Spring如何自定义加载配置文件(分层次加载)

    这篇文章主要介绍了Spring如何自定义加载配置文件(分层次加载)问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • java生成压缩文件示例代码

    java生成压缩文件示例代码

    在工作过程中,需要将一个文件夹生成压缩文件,然后提供给用户下载。写了一个压缩文件的工具类。该工具类支持单个文件和文件夹压缩
    2013-11-11
  • java项目新建遇到的两个问题解决

    java项目新建遇到的两个问题解决

    创建一个新的Java项目可以通过多种方式进行,包括使用集成开发环境(IDE)或手动创建,下面这篇文章主要给大家介绍了关于java项目新建遇到的两个问题,需要的朋友可以参考下
    2024-06-06
  • Java 基于Spire.Cloud.SDK for Java在PDF中绘制形状

    Java 基于Spire.Cloud.SDK for Java在PDF中绘制形状

    这篇文章主要介绍了Java 基于Spire.Cloud.SDK for Java在PDF中绘制形状,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • Java concurrency集合之 CopyOnWriteArrayList_动力节点Java学院整理

    Java concurrency集合之 CopyOnWriteArrayList_动力节点Java学院整理

    这篇文章主要介绍了Java concurrency集合之 CopyOnWriteArrayList的相关资料,需要的朋友可以参考下
    2017-06-06
  • Java创建线程及配合使用Lambda方式

    Java创建线程及配合使用Lambda方式

    这篇文章主要介绍了Java创建线程及配合使用Lambda方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08

最新评论