java锁的种类以及辨析(一):自旋锁
java锁的种类以及辨析(一):自旋锁
1、自旋锁
自旋锁是采用让当前线程不停地的在循环体内执行实现的,当循环的条件被其他线程改变时 才能进入临界区。如下
public class SpinLock {private AtomicReference<Thread> sign =new AtomicReference<>();public void lock(){Thread current = Thread.currentThread();while(!sign .compareAndSet(null, current)){}}public void unlock (){Thread current = Thread.currentThread();sign .compareAndSet(current, null);}
}
使用了CAS原子操作,lock函数将owner设置为当前线程,并且预测原来的值为空。unlock函数将owner设置为null,并且预测值为当前线程。
当有第二个线程调用lock操作时由于owner值不为空,导致循环一直被执行,直至第一个线程调用unlock函数将owner设置为null,第二个线程才能进入临界区。
由于自旋锁只是将当前线程不停地执行循环体,不进行线程状态的改变,所以响应速度更快。但当线程数不停增加时,性能下降明显,因为每个线程都需要执行,占用CPU时间。如果线程竞争不激烈,并且保持锁的时间段。适合使用自旋锁。
注:该例子为非公平锁,获得锁的先后顺序,不会按照进入lock的先后顺序进行。
java锁的种类以及辨析(一):自旋锁相关推荐
- java锁的种类以及辨析(转载)
java锁的种类以及辨析(一):自旋锁 锁作为并发共享数据,保证一致性的工具,在JAVA平台有多种实现(如 synchronized 和 ReentrantLock等等 ) .这些已经写好提供的锁为我 ...
- Java锁的种类以及辨析(四):可重入锁
Java锁的种类以及辨析(四):可重入锁 本文里面讲的是广义上的可重入锁,而不是单指JAVA下的ReentrantLock. 可重入锁,也叫做递归锁,指的是同一线程 外层函数获得锁之后 ,内层递归函数 ...
- 辨析:自旋锁与信号量
自旋锁(Spinlock) 信号量(Semaphore): 1. 自旋锁与信号量简介 自旋是锁的一种实现方式,通过忙等待("自旋,spinning")来实现[例如通过while循环 ...
- 一文看懂临界区、互斥锁、同步锁、临界区、信号量、自旋锁等名词!
点击上方"业余草",选择"置顶公众号" 第一时间获取技术干货和业界资讯! 关于线程安全的专有名词有一大堆.你们突然之间问我这个名词是什么意思,那个名词是什么意思 ...
- 自旋锁和互斥锁实例_多线程编程之自旋锁
一.什么是自旋锁 一直以为自旋锁也是用于多线程互斥的一种锁,原来不是! 自旋锁是专为防止多处理器并发(实现保护共享资源)而引入的一种锁机制.自旋锁与互斥锁比较类似,它们都是为了解决对某项资源的互斥使用 ...
- Linux 锁机制(3)之自旋锁
Linux 锁机制(3)之自旋锁 1. 自旋锁 1.1 两种锁 1.2 自旋锁 1.3 自旋名字来源:自旋锁一直循环等待,直到获取锁为止. 1.4 自旋锁优点: 2 自旋锁特点/使用: 2.1 临界区 ...
- 自旋锁与互斥锁的对比、手工实现自旋锁
自旋锁与互斥锁的对比.手工实现自旋锁 版权声明:本文为博主原创文章,转载请注明出处,谢谢. https://blog.csdn.net/FreeeLinux/article/details/53695 ...
- Java锁的种类以及辨析(二):自旋锁的其他种类
作者:山鸡 锁作为并发共享数据,保证一致性的工具,在JAVA平台有多种实现(如 synchronized 和 ReentrantLock等等 ) .这些已经写好提供的锁为我们开发提供了便利,但是锁的具 ...
- java 自旋锁_java锁的种类以及辨析(一):自旋锁
public class SpinLock { private volatile int lock = 0; private static Unsafe theUnsafe; private stat ...
最新文章
- 配置文件http://www.cnblogs.com/Jevon-ran/p/7112007.html
- apply,call,bind区别
- 将Windows8安装在手持终端上
- IPSec的NAT穿越
- 函数模板,函数模板重载,可变参数模板,函数模板覆盖,通过引用交换数据
- 阿克斯java表_java 入门第三季的6-5 作业, 希望大家指点
- 版是什么_雕版研习 | 什么是版画?版是画的母亲,画是版的子女
- 6种快速统计代码执行时间的方法,真香!(史上最全)
- 如何将QVTKWidget嵌入到QT窗体,实现点云的显示?
- 锁屏面试题百日百刷-VUE篇(一)
- Hadoop HIVE 窗口函数
- Go (interface)接口二
- 2010年篮球规则(FIBA)
- android阿拉伯语言的数字
- LayerCAM:Exploring Hierarchical Class Activation Maps for Localization
- ios 凭据验证_iOS内购IAP(十四) —— IAP的收据验证(一)
- java模拟键盘输入中文_Appium+java 模拟键盘输入
- 计算机中1 tb的硬盘容量大小等于,大脑记忆容量等于多大硬盘?
- Golang位运算符
- 测序技术回顾与第三代测序技术展望