温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Java多线程之多种锁和阻塞队列的示例分析

发布时间:2021-06-10 09:15:26 来源:亿速云 阅读:106 作者:小新 栏目:开发技术

这篇文章给大家分享的是有关Java多线程之多种锁和阻塞队列的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

一、悲观锁和乐观锁

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多线程之多种锁和阻塞队列的示例分析

感谢各位的阅读!关于“Java多线程之多种锁和阻塞队列的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI