JAVA并发包之原子操作类简介

这些类都是使用非阻塞算法CAS实现的,相比使用锁实现原子性操作在性能上有很大提高。

基本类型

int addAndGet(int value) 以原子方式将输入的数值实例中的值相加,并返回结果

boolean compareAndSet(int expect,int update)如果输入的数值等于预期值,则以原子方式将该值设置为输入的值

int getAndIncrement()以原子的方式将当前值加1(返回的是自增前的值)

void lazySet(int newValue) 最终会设置成newValue,可能会导致其他线程在之后的一段时间内可以读到旧值

int getAndSet(int newValue) 以原子方式设置为newValue,并返回旧值

public class AtomicIntegerTest{
	
	static AtomicInteger ai = new AtomicInteger(1);
	
	public static void main(String[] args){
		System.out.println(ai.getAndIncrement());//1
		System.out.println(ai.get());//2
	}
}

数组类型

int addAndGet(int i,int value)以原子方式将输入值与数组中索引i的元素相加

boolean compareAndSet(int i,int expect,int update)如果当前值等于预期值,则以原子方式将数组位置i的元素设置成update值

public class AtomicIntegerArrayTest{
	
	static int[] value = new int[]{1,2,3};
	
	static AtomicIntegerArray ai = new AtomicIntegerArray(value);
	
	public static void main(String[] args){
		ai.getAndSet(0,3);
		System.out.println(ai.get(0));//3
		System.out.println(value[0]);//1
	}
}

public class AtomicReferenceTest{
	public static AtomicReference<User> atomicUserRef = new AtomicReference<>();
  
  public static void main(String[] args){
  	User user = new User("jordan",23);
	atomicUserRef.set(user);
	
	User updateUser = new User("james",23);
	atomicUserRef.compareAndSet(user,updateUser);//进行原子操作
	System.out.println(atomicUserRef.get().getName());
	System.out.println(atomicUserRef.get().getAge());
  }
  
  static class User{
  	private String name;
	private int age;
	public User(String name,int age){
		this.name = name;
	  	this.age = age;
	}
	public String getName(){
		return name;
	}
	public int getAge(){
		return age;
	}
  }
  
}

public class AtomicIntegerFieldUpdaterTest{
	private static AtomicIntegerFieldUpdater<User> a = AtomicIntegerFieldUpdater.newUpdate(User.class, "age");
  
  public static void main(String[] args){
  	User jordan = new User("jordan",23);
	System.out.println(a.getAndIncrement(jordan));//23
	System.our.println(a.get(jordan));//24
  }
}

JDK8新增

以Long型为例

全部评论
CAS算法容易出现ABA问题吧
点赞 回复
分享
发布于 2023-05-29 10:06 江苏
用的时候还是得看具体场景
点赞 回复
分享
发布于 2023-05-29 10:15 广东
滴滴
校招火热招聘中
官网直投

相关推荐

点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务