(1)CAS是什么?
比较并交换
举例1, CAS产生场景代码?
import java.util.concurrent.atomic.AtomicInteger; public class CASDemo { public static void main(String[] args) { AtomicInteger atomicInteger=new AtomicInteger(5);//主物理内存 //比较5 System.out.println(atomicInteger.compareAndSet(5, 2019)+"\t current data(主物理内存) : "+ atomicInteger.get()); //修改失败 System.out.println(atomicInteger.compareAndSet(5, 1024)+"\t current data(主物理内存) : "+ atomicInteger.get()); } }
举例2, CAS产生场景代码?原子引用
public class CAS_ABADemo { public static void main(String[] args) { //========================原子引用========================== User A = new User("A", 123); User B = new User("B", 456); //主物理内存 引用比较的是地址 AtomicReference<User> atomicReference1 = new AtomicReference<>(); atomicReference1.set(A); System.out.println(atomicReference1.compareAndSet(A, B) + "\t" + atomicReference1.get().toString()); System.out.println(atomicReference1.compareAndSet(A, B) + "\t" + atomicReference1.get().toString()); } } class User { String name; int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public User() { } public User(String name, int age) { this.name = name; this.age = age; } @Override public String toString() { return "User{" + "name='" + name + '\'' + ", age=" + age + '}'; } }