java锁的种类以及辨析(一):自旋锁

转载 2016年08月30日 12:09:41

java锁的种类以及辨析(一):自旋锁

作者:山鸡

锁作为并发共享数据,保证一致性的工具,在JAVA平台有多种实现(如 synchronized 和 ReentrantLock等等 ) 。这些已经写好提供的锁为我们开发提供了便利,但是锁的具体性质以及类型却很少被提及。本系列文章将分析JAVA下常见的锁名称以及特性,为大家答疑解惑。

1、自旋锁

自旋锁是采用让当前线程不停地的在循环体内执行实现的,当循环的条件被其他线程改变时 才能进入临界区。如下

01 public class SpinLock {
02  
03   private AtomicReference<Thread> sign =new AtomicReference<>();
04  
05   public void lock(){
06     Thread current = Thread.currentThread();
07     while(!sign .compareAndSet(null, current)){
08     }
09   }
10  
11   public void unlock (){
12     Thread current = Thread.currentThread();
13     sign .compareAndSet(current, null);
14   }
15 }

使用了CAS原子操作,lock函数将owner设置为当前线程,并且预测原来的值为空。unlock函数将owner设置为null,并且预测值为当前线程。

当有第二个线程调用lock操作时由于owner值不为空,导致循环一直被执行,直至第一个线程调用unlock函数将owner设置为null,第二个线程才能进入临界区。

由于自旋锁只是将当前线程不停地执行循环体,不进行线程状态的改变,所以响应速度更快。但当线程数不停增加时,性能下降明显,因为每个线程都需要执行,占用CPU时间。如果线程竞争不激烈,并且保持锁的时间段。适合使用自旋锁。

注:该例子为非公平锁,获得锁的先后顺序,不会按照进入lock的先后顺序进行。

转载:http://ifeve.com/java_lock_see1/

Java锁的种类以及辨析——自旋锁的其他种类

锁作为并发共享数据,保证一致性的工具,在JAVA平台有多种实现(如 synchronized 和 ReentrantLock等等 ) 。这些已经写好提供的锁为我们开发提供了便利,但是锁的具体性质以及类...
  • hgh813210
  • hgh813210
  • 2015年08月31日 15:18
  • 256

Java锁的种类以及辨析(二):自旋锁的其他种类

锁作为并发共享数据,保证一致性的工具,在JAVA平台有多种实现(如 synchronized 和 ReentrantLock等等 ) 。这些已经写好提供的锁为我们开发提供了便利,但是锁的具体性质以及类...
  • gaowenhui2008
  • gaowenhui2008
  • 2015年11月06日 14:53
  • 467

java锁的种类以及辨析(一):自旋锁

java锁的种类以及辨析(一):自旋锁 作者:山鸡 锁作为并发共享数据,保证一致性的工具,在JAVA平台有多种实现(如 synchronized 和 ReentrantLock等等 )...
  • fwt336
  • fwt336
  • 2017年02月09日 17:13
  • 196

Java锁的种类及辨析(一):自旋锁

锁作为并发共享数据,保证一致性的工具,在JAVA平台有多种实现(如 synchronized 和 ReentrantLock等等 ) 。这些已经写好提供的锁为我们开发提供了便利,但是锁的具体性质以及类...
  • zmx729618
  • zmx729618
  • 2017年11月14日 10:16
  • 61

自旋锁原理及java自旋锁

一、自旋锁的概念 首先是一种锁,与互斥锁相似,基本作用是用于线程(进程)之间的同步。与普通锁不同的是,一个线程A在获得普通锁后,如果再有线程B试图获取锁,那么这个线程B将会挂起(阻塞);试想下,如果两...
  • sunp823
  • sunp823
  • 2015年11月17日 13:03
  • 5933

java 自旋锁(可重入且无死锁)

java字旋锁
  • q646406929
  • q646406929
  • 2014年09月12日 11:46
  • 4533

互斥锁,自旋锁与自适应自旋锁

线程安全与锁的优化互斥锁:从 实现原理上来讲,Mutex属于sleep-waiting类型的锁。例如在一个双核的机器上有两个线程(线程A和线程B),它们分别运行在Core0和 Core1上。假设线程A...
  • wu_cai_
  • wu_cai_
  • 2016年05月03日 13:39
  • 518

聊聊高并发(六)实现几种自旋锁(一)

在聊聊高并发(五)理解缓存一致性协议以及对并发编程的影响 我们了解了处理器缓存一致性协议的原理,并且提到了它对并发编程的影响,“多个线程对同一个变量一直使用CAS操作,那么会有大量修改操作,从而产生大...
  • ITer_ZC
  • ITer_ZC
  • 2014年10月22日 11:39
  • 6153

JAVA多线程之——自旋锁、CLH、MCS

自旋锁学习了解自旋锁之前先回顾一下互斥锁 互斥锁 线程在获取互斥锁的时候,如果发现锁已经被其它线程占有,那么线程就会惊醒休眠,然后在适当的时机(比如唤醒)在获取锁。 自旋锁 那么自旋锁顾名思义...
  • pengdandezhi
  • pengdandezhi
  • 2017年03月28日 22:38
  • 194

可重入锁与自旋锁

转自:http://ifeve.com/java_lock_see4/ 锁作为并发共享数据,保证一致性的工具,在JAVA平台有多种实现(如 synchronized 和 ReentrantLoc...
  • GKQQQ
  • GKQQQ
  • 2017年05月03日 18:20
  • 599
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java锁的种类以及辨析(一):自旋锁
举报原因:
原因补充:

(最多只允许输入30个字)