锁的种类 | 概念 | 实现 |
悲观锁(阻塞同步) | synchronized、 | |
乐观锁(非阻塞同步) | 目前,在Java中应用最广泛的非阻塞同步就是CAS | CAS包装类:AtomicXXX、 |
公平锁 | 公平锁是指多个线程在等待同一个锁时,必须按照申请锁的时间顺序来依次获得锁;而非公平锁则不保证这一点,在锁被释放时,任何一个等待锁的线程都有机会获得锁。 | ReentrantLock提供了公平锁和非公平锁的实现; 公平锁: |
非公平锁 | synchronized | |
独占锁(是一种悲观锁) | 锁只能被单个线程持有 | ReentrantLock |
共享锁(是一种乐观锁) | 锁能被多个线程共同持有 | ReadWriteLock |
可重入锁 | synchronized、 | |
自旋锁 分类: 自适应的自旋锁:自适应意味着自旋的时间不再是固定的了; | 如果物理机器有一个以上的处理器或处理器核心,能让两个或以上的线程同时并行执行,我们就可以让后面请求锁的那个线程“稍等一会”,但不放弃处理器的执行时间,看看只有持有锁的线程是否很快就会释放锁。 为了让线程等待,我们只须让线程执行一个忙循环(自旋),这项技术就是所谓的自旋锁。(《深入理解Java虚拟机(第3版)》,第479页) | |
重量级锁 | 使用操作系统互斥量来实现的传统锁 | |
轻量级锁 | 它设计的初衷是在没有多线程竞争的前提下,减少传统的重量级锁使用操作系统互斥量产生的性能消耗。 如果出现两条以上的线程争用同一个锁的情况,那轻量级锁就不再有效,必须要膨胀为重量级锁。 轻量级锁是在无竞争的情况下使用CAS操作去消除同步使用的互斥量。 | |
偏向锁 | 偏向锁的目的是:消除数据在无竞争情况下的同步原语,进一步提高程序的运行性能。 偏向锁是在无竞争情况下把整个同步都消除掉,连CAS操作都不去做了。 偏向锁会偏向于第一个获得它的线程,如果在接下来的执行过程中,该锁一直没有被其他的线程获取,则持有偏向锁的线程将永远不需要再进行同步。 一旦出现另外一个线程去尝试获取这个锁的情况,偏向模式就马上宣告结束。 |
Java 中的各种锁(自己总结 )
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
Java中各种锁的介绍
Java中各种锁的介绍前言Java提供了各种各样的锁,每种锁都有适合的使用的场
Java 重入锁 数据 公平锁 -
Java 总结 锁 java 各种锁
Java中常见的各种锁
Java 总结 锁 多线程 并发编程 分布式 java -
JAVA各种锁总结 java常见锁
一、乐观锁 与 悲观锁对于线程是否需要锁住共享的资源,我们可以将其分为乐观锁与悲观锁,前者不会锁住共享资源后者会将共享资源进行锁住。
JAVA各种锁总结 java jvm 开发语言 自旋锁 -
Java 单例 锁 java中的各种锁
Java 单例 锁 java中的各种锁
公平锁 自旋锁 悲观锁