ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java 中的各种锁

2021-12-23 18:04:20  阅读:154  来源: 互联网

标签:各种 Java ReentrantLock 同步 线程 公平 偏向


 

引用自https://www.cnblogs.com/cag2050/p/12357844.html

java中的各种锁的种类、实现

锁的种类概念实现
悲观锁(阻塞同步)   synchronized、
乐观锁(非阻塞同步) 目前,在Java中应用最广泛的非阻塞同步就是CAS CAS包装类:AtomicXXX、
公平锁 公平锁是指多个线程在等待同一个锁时,必须按照申请锁的时间顺序来依次获得锁;而非公平锁则不保证这一点,在锁被释放时,任何一个等待锁的线程都有机会获得锁。 ReentrantLock提供了公平锁和非公平锁的实现;
公平锁:ReentrantLock pairLock = new ReentrantLock(true);
非公平锁:ReentrantLock pairLock = new ReentrantLock(false);如果构造函数不传递参数,则默认是非公平锁。
非公平锁   synchronized
独占锁(是一种悲观锁) 锁只能被单个线程持有 ReentrantLock
共享锁(是一种乐观锁) 锁能被多个线程共同持有 ReadWriteLock
可重入锁   synchronized、
自旋锁
分类:
自适应的自旋锁:自适应意味着自旋的时间不再是固定的了;
如果物理机器有一个以上的处理器或处理器核心,能让两个或以上的线程同时并行执行,我们就可以让后面请求锁的那个线程“稍等一会”,但不放弃处理器的执行时间,看看只有持有锁的线程是否很快就会释放锁。
为了让线程等待,我们只须让线程执行一个忙循环(自旋),这项技术就是所谓的自旋锁。(《深入理解Java虚拟机(第3版)》,第479页)
 
重量级锁 使用操作系统互斥量来实现的传统锁  
轻量级锁 它设计的初衷是在没有多线程竞争的前提下,减少传统的重量级锁使用操作系统互斥量产生的性能消耗。
如果出现两条以上的线程争用同一个锁的情况,那轻量级锁就不再有效,必须要膨胀为重量级锁。
轻量级锁是在无竞争的情况下使用CAS操作去消除同步使用的互斥量。
 
偏向锁 偏向锁的目的是:消除数据在无竞争情况下的同步原语,进一步提高程序的运行性能。
偏向锁是在无竞争情况下把整个同步都消除掉,连CAS操作都不去做了。
偏向锁会偏向于第一个获得它的线程,如果在接下来的执行过程中,该锁一直没有被其他的线程获取,则持有偏向锁的线程将永远不需要再进行同步。
一旦出现另外一个线程去尝试获取这个锁的情况,偏向模式就马上宣告结束。
 

内容来源:《深入理解Java虚拟机(第3版)》

标签:各种,Java,ReentrantLock,同步,线程,公平,偏向
来源: https://www.cnblogs.com/yb-ken/p/15724615.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有