AtomicInteger 系列

创建: AtomicInteger atomicInteger = new AtomicInteger();

初始化创建: AtomicInteger atomicInteger = new AtomicInteger(123);

常用方法:

addAndGet(10) 增加后返回增加后的值 ,增加负数就为减法了

getAndAdd() 增加后返回增加前的值

getAndIncrement() 自增返回自增前的值 i++

incrementAndGet() 自增返回增加后的值 ++i

decrementAndGet() 自减 i--

getAndDecrement() 自减 --i

原子性引用型 AtomicReference

原子更新基本类型的AtomicInteger,只能更新一个变量,如果要原子的更新多个变量,就需要使用这个原子更新引用类型提供的类。

public class User {
	String name;
	int old;
	
	public User(String name, int old) {
		this.name = name;
		this.old = old;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getOld() {
		return old;
	}
	public void setOld(int old) {
		this.old = old;
	}
	@Override
	public String toString() {
		return "User [name=" + name + ", old=" + old + "]";
	}

测试类:

public class Test {
	public static void main(String[] args) {
		User user = new User("张三", 14);
		User user1 = new User("李四", 19);
		
		AtomicReference<User> reference = new AtomicReference<User>();
		reference.set(user);
		reference.compareAndSet(user, user1);
		
		System.out.println(reference.get().toString());
	}
}

更新成功。整个类就以原子的形式更新成功了。

AtomicIntegerFieldUpdater 更新部分字段

注意其中的对象需要使用volitile进行修饰

public class Test {
	public static void main(String[] args) {
		AtomicIntegerFieldUpdater<User> a = AtomicIntegerFieldUpdater.newUpdater(User.class, "old");
		
		User user = new User("张三", 14);
		User user1 = new User("李四", 18);
		a.compareAndSet(user1, 18, 20);
		
		System.out.println(user1.toString());
	}
}
上次更新时间: 2024/5/7 05:59:02