Java锁机制 自旋锁(spinlock)剖析
来源:互联网 发布:游戏视频直播软件 编辑:程序博客网 时间:2024/05/09 03:40
Spinlock 介绍
线程通过 busy-wait-loop 方式来获取锁, 任何时刻只有一个线程能够获得锁, 其它线程忙等待知道获得锁。
应用场景
spinlock 不会有线程状态切换,所以响应更快。
使用spinlock时, 临界区要尽量短,不要有显示或隐式的系统调用。如读写文件等操作。
临界区:指的是一个访问共用资源(例如:共用设备或是共用存储器)的程序片段,当有线程进入临界区段时,其他线程或是进程必须等待
当存在大量线程,竞争激烈时,不适合使用自旋锁,因为每个线程都在在执行,占用CPU时间。
Java 实现自旋锁
本例子使用了CAS原子操作,非公平锁, 即获得锁的先后顺序,不会按照进入lock的先后顺序进行。
package concurrent.lock;import java.util.concurrent.atomic.AtomicReference;/** * 自旋锁 * 非公平锁,CAS, 非可重入锁 * @author Marshall * benfit:响应速度更快, 因为不切换线程状态 * bad:线程数量达到一定量时, 性能下降 */public class SpinLock implements Lock{ private AtomicReference<Thread> sign = new AtomicReference<Thread>(); public void lock(){ Thread current=Thread.currentThread(); while(!sign.compareAndSet(null, current)){ } } public void unlock(){ Thread current=Thread.currentThread(); sign.compareAndSet(current, null); }}
0 0
- Java锁机制 自旋锁(spinlock)剖析
- 自旋锁spinlock剖析
- 自旋锁(spinlock)
- 自旋锁(spinlock)
- 自旋锁(spinlock)
- 自旋锁(spinlock)
- 自旋锁(spinlock)
- 自旋锁(spinlock)
- 自旋锁(spinlock)
- 自旋锁spinlock剖析与改进
- 自旋锁spinlock剖析与改进
- 转:自旋锁(spinlock)
- 五、自旋锁(spinlock)
- 自旋锁spinlock
- 自旋锁 SpinLock
- 自旋锁spinlock
- 自旋锁 spinlock 理解
- Spinlock编程(自旋锁)
- ios 根据文字数量计算UILabel高度(已修改)
- xxx cannot be resolved or is not a field
- 宏碁4755G电脑升级
- JavaScript prototype 属性
- C语言 交换两个整形变量的值
- Java锁机制 自旋锁(spinlock)剖析
- 如何更改你的 Mac 设备名称
- org.springframework.beans.factory.BeanCreationException: Error creating bean with name
- ROS下多个kinect在一台电脑上同时运行
- Myeclipse导入eclipse工程无法使用问题解决
- linux u盘启动盘制作如此简单,一个dd命令搞定
- Java实现两个大数相乘
- Linux c——中断处理
- JZOJ 4771 爬山 (Tarjan缩环、人工栈)