AtomicReference实现单例模式
CAS是项乐观锁技术,当多个线程尝试使⽤CAS同时更新同⼀个变量时,只有其中⼀个线程能更新变量的值,⽽其它线程都失败,失败的线程并不会被挂起,⽽是被告知这次竞争中失败,并可以再次尝试。
乐观锁的⼀种实现⽅式——CAS
在JDK1.5 中新增urrent(J.U.C)就是建⽴在CAS之上的。相对于对于synchronized这种阻塞算法,CAS是⾮阻塞算法的⼀种常见实现。所以J.U.C在性能上有了很⼤的提升。
借助CAS(AtomicReference)实现单例模式:
public class Singleton {
private static final AtomicReference<Singleton> priveInstance = new AtomicReference<>();
private Singleton() {
}
Singleton getInstance() {
//如果⼀直执⾏不成功,就⼀直处于死循环中,属于忙等待算法
for(;;){
if (() == null) {
Singleton _newInstance = new Singleton();
priveInstancepareAndSet(null, _newInstance);
}
单例模式的几种实现方式();
}
}
}
⽤CAS的好处在于不需要使⽤传统的锁机制来保证线程安全,CAS是⼀种基于忙等待的算法,依赖底层硬件的实现,相对于锁它没有线程切换和阻塞的额外消耗,可以⽀持较⼤的并⾏度。
CAS的⼀个重要缺点在于如果忙等待⼀直执⾏不成功(⼀直在死循环中),会对CPU造成较⼤的执⾏开销。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论