java线程安全之——自旋锁
来源:互联网 发布:软件验收测试 编辑:程序博客网 时间:2024/06/05 02:12
作者:山鸡
锁作为并发共享数据,保证一致性的工具,在JAVA平台有多种实现(如 synchronized 和 ReentrantLock等等 ) 。这些已经写好提供的锁为我们开发提供了便利,但是锁的具体性质以及类型却很少被提及。本系列文章将分析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的先后顺序进行。
阅读全文
0 0
- java线程安全之——自旋锁
- java线程安全之——可重入锁
- java线程安全之——阻塞锁
- 线程同步之自旋锁(SpinLock)
- Java线程 - CAS自旋锁(spin-lock)
- Java多线程——自旋锁
- Java学习之——线程非安全单利模式到线程安全单利模式
- 黑马程序员——java基础之线程安全
- 转—java 线程安全
- java线程学习(1)—线程安全
- Java锁之自旋锁详解
- Java 并发之线程安全
- Java虚拟机之线程安全
- Java 多线程之线程安全
- java 线程安全 锁
- 学习笔记之Java线程安全杂谈(上)——线程安全概念和基本方案
- JAVA 线程 之 初级线程安全
- java多线程之路之线程安全的集合—Core Java学习
- 操作系统刷题(十九)
- Switf: 消除警告-treating unicode character whitespace
- Ubuntu 12.04用root登录
- MYSQL主从热备配置
- linux 信号简介
- java线程安全之——自旋锁
- 封装好的可设置标题、正文字体的默认样式UIAlertController
- 夜间切换模式
- TensorFlow 保存和导入计算图中的部分节点
- @Controller和@RestController的区别?
- grep排除搜索的目录
- Java--interrupt(),interrupted(),isInterrupted()
- Laravel 读取 config 下的数据
- PullLayout下拉得动态头布局