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

作者:若能绽放光丶 时间:2023-09-26 10:31:55 

一、悲观锁和乐观锁

1.1. 乐观锁

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

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

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

1.2. 悲观锁

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

二、公平锁和非公平锁

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

三、可重入锁(递归锁)

先看官网的解释翻译后的

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

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

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

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

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

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

四、自旋锁

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

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

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

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

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

六、什么是阻塞队列?

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

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

七、阻塞队列(BlockingQueue)

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

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

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

来源:https://blog.csdn.net/weixin_51194902/article/details/117571506

标签:java,锁,阻塞队列
0
投稿

猜你喜欢

  • winform用datagridview制作课程表实例

    2023-11-24 06:08:28
  • Java字符串驼峰与下换线格式转换如何实现

    2022-02-18 09:56:14
  • Java关于桶排序的知识点总结

    2023-12-06 03:18:04
  • spring boot项目快速构建的全步骤

    2023-11-16 21:16:38
  • c#系列 list详情

    2022-10-22 22:18:54
  • 详解JAVA之运算符

    2023-09-05 13:22:46
  • 冒泡排序的原理及java代码实现

    2021-12-26 18:45:38
  • Android使用android-wheel实现省市县三级联动

    2022-10-07 21:01:00
  • c# 类型转换

    2021-06-17 06:45:22
  • springboot+mybatis报错找不到实体类的问题

    2023-05-20 02:04:10
  • java虚拟机原理:类加载过程详解

    2023-08-09 11:35:37
  • Java遍历Map对象的四种方式

    2022-05-07 14:30:04
  • Kotlin使用协程实现高效并发程序流程详解

    2021-12-27 20:47:21
  • Spring学习笔记之bean的基础知识

    2021-09-08 10:09:27
  • Mybatis的介绍、基本使用、高级使用

    2023-03-26 02:47:18
  • Java利用Selenium操作浏览器的示例详解

    2022-06-17 17:34:20
  • Logger.error打印错误异常的详细堆栈信息

    2022-01-06 23:03:04
  • Java有趣好玩的图形界面开发八个案例实现

    2022-12-20 06:20:35
  • Android连接MySQL数据库并进行增删改查操作示例讲解

    2023-07-03 13:20:15
  • 深入理解C#中foreach遍历的使用方法

    2023-11-02 08:51:04
  • asp之家 软件编程 m.aspxhome.com