java多线程 CAS原子引用AtomicReference

Posted 500年

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java多线程 CAS原子引用AtomicReference相关的知识,希望对你有一定的参考价值。

java多线程 CAS原子引用AtomicReference

CAS:comparAndSet 比较并交换 与乐观锁原来相同。
背景:ABA问题
在这里插入图片描述

实战

import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicStampedReference;

// 原子引用
public class CASDemo {

public static void main(String[] args) {

	// 注意、注意、注意:Integer处在具体的业务中,应为对象。切勿使用Integer。因为超过127就会一直false。详见:Integer
	// -128~127 == 问题
	AtomicStampedReference<Integer> atomicStampedReference = new AtomicStampedReference<>(1, 1);

	new Thread(() -> {
		try {
			TimeUnit.SECONDS.sleep(2);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		boolean compareAndSet = atomicStampedReference.compareAndSet(1, 2, atomicStampedReference.getStamp(),
				atomicStampedReference.getStamp() + 1);
		System.out.println(Thread.currentThread().getName() + " " + compareAndSet);
		boolean compareAndSet2 = atomicStampedReference.compareAndSet(2, 1, atomicStampedReference.getStamp(),
				atomicStampedReference.getStamp() + 1);
		System.out.println(Thread.currentThread().getName() + " " + compareAndSet2);
	}).start();

	new Thread(() -> {
		try {
			TimeUnit.SECONDS.sleep(2);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		boolean compareAndSet = atomicStampedReference.compareAndSet(1, 2, atomicStampedReference.getStamp(),
				atomicStampedReference.getStamp() + 1);
		System.out.println(Thread.currentThread().getName() + " " + compareAndSet);
		boolean compareAndSet2 = atomicStampedReference.compareAndSet(2, 1, atomicStampedReference.getStamp(),
				atomicStampedReference.getStamp() + 1);
		System.out.println(Thread.currentThread().getName() + " " + compareAndSet2);
	}).start();

}

}

特别鸣谢:狂神说Java老师的无私奉献

.
.
.
上一篇 java多线程(十) JMM理解 Volatile
下一篇 java多线程(十二)死锁及死锁问题排查

以上是关于java多线程 CAS原子引用AtomicReference的主要内容,如果未能解决你的问题,请参考以下文章

Java并发多线程编程——原子类AtomicInteger的ABA问题及原子更新引用

java多线程-CAS原子操作图

6.23Java多线程CAS原子操作

ava多线程系列 JUC原子类 CAS及原子类

Java多线程系列---“JUC原子类”01之 原子类的实现(CAS算法)

Java——多线程高并发系列之理解CAS原子变量类的使用