站长网 语言 java的乐观锁和悲观锁是如何实现的

java的乐观锁和悲观锁是如何实现的

java的锁有这么几类。 乐观锁和悲观锁 乐观锁就是JVM认为不通过加锁也能保证并发的正确性。典型实现是诸如AtomicInteger的实现。 悲观锁就是需要加锁互斥。典型实现是Synchronized(Synchronized属于乐观锁还是悲观锁其实跟具体实现有关,大部分场景下都是

java的锁有这么几类。

乐观锁和悲观锁

乐观锁就是JVM认为不通过加锁也能保证并发的正确性。典型实现是诸如AtomicInteger的实现。

悲观锁就是需要加锁互斥。典型实现是Synchronized(Synchronized属于乐观锁还是悲观锁其实跟具体实现有关,大部分场景下都是悲观锁)和ReentrantLock。

可重入和不可重入

可重入是指当一个线程获取了锁,但是没有释放,这个线程又要获取这个锁,仍然能获取成功。Synchronized和ReentrantLock都是可重入锁。

不可重入是可重入的否命题,这样自己会把自己死锁。应该没有这样的实现。

公平锁和非公平锁

公平锁是先请求锁的线程肯定先获得锁,也就是FIFO。公平说是不是就是合理的?可能也不一定,因为这会造成上下文的切换。ReentrantLock默认是非公平锁,但是可以通过构造方法构造公平锁实例。

非公平锁是新来的线程有优先获得锁的机会,也就是可以插队。合理吗?可能也不合理,因为这可能造成“饿死”现象:在排队的旧的线程总是获取不到锁。Sysnchronized其实就是非公平锁。

排他锁和共享锁

排他锁是一个线程获得锁之后,其他线程不能再获得锁。大多数场景下都是排他锁。

共享锁是指多个线程可以同时获得锁。常见的是多个线程可以同时获得读锁。

本文来自网络,不代表站长网立场,转载请注明出处:https://www.zwzz.com.cn/html/biancheng/yuyan/2021/0523/4390.html

作者: dawei

【声明】:站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。
联系我们

联系我们

0577-28828765

在线咨询: QQ交谈

邮箱: xwei067@foxmail.com

工作时间:周一至周五,9:00-17:30,节假日休息

返回顶部