import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicIntegerArray;
import java.util.concurrent.atomic.AtomicIntegerFieldUpdater;
import java.util.concurrent.atomic.AtomicReference;
public class Main {
public static void main(String[] args){
//原子更新基本类型
System.out.println("-----原子更新基本类型----");
AtomicInteger ai=new AtomicInteger(1);
System.out.println(ai.getAndAdd(1));
System.out.println(ai.get());
//原子更新数组
System.out.println("-----原子更新数组----");
int[] a={1,2,3};
AtomicIntegerArray array=new AtomicIntegerArray(a);
array.getAndSet(0,6);
System.out.println(array.get(0));
System.out.println(a[0]);
//原子更新引用
System.out.println("-----原子更新引用----");
AtomicReference are=new AtomicReference<>();
User user1=new User("cxh",22);
are.set(user1);
User user2=new User("caoxiaohong",24);
are.compareAndSet(user1,user2);
System.out.println(are.get().getName());
System.out.println(are.get().getAge());
//原子更新字段
System.out.println("-----原子更新字段----");
AtomicIntegerFieldUpdater aifu=AtomicIntegerFieldUpdater.newUpdater(Profile.class,"age");//创建更新器
Profile pro=new Profile("Cxh",25);
System.out.println(aifu.getAndIncrement(pro));
System.out.println(aifu.get(pro));
}
//此类用于原子更新引用
static class User{
String name;
int age;
User(String name,int age){
this.name=name;
this.age=age;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
//此类用于原子更新类字段
static class Profile{
String name;
public volatile int age;//类型必须是public volatile 类型
Profile(String name,int age){
this.name=name;
this.age=age;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
}