天天看点

java 原子操作有哪些_java中的12个原子操作类

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;

}

}

}