Atomic类是Java中原子性操作的一个封装类,可以用于无锁操作,避免多线程竞争问题。它提供了一组原子操作,具有以下三个特征:原子性、有序性和线程安全性。Atomic类对于高并发场景下的数据修改操作具有很大的帮助作用,可以提高程序的性能和稳定性。
在使用Atomic类时,常见的操作包括get获取当前值、set设置新值、compareAndSet(预期值,更新值)比较并设置新值;以及加、减、增、减等操作。
下面以两个示例代码说明Atomic类的用法:
示例一:AtomicInteger 的使用
import java.util.concurrent.atomic.AtomicInteger;
public class AtomicExample1 {
private AtomicInteger count = new AtomicInteger(0);
public void increaseCount() {
count.getAndIncrement();
}
public int getCount() {
return count.get();
}
public static void main(String[] args) throws InterruptedException {
AtomicExample1 atomicExample1 = new AtomicExample1();
Thread t1 = new Thread(() -> {
for (int i = 0; i < 10000; i++) {
atomicExample1.increaseCount();
}
});
Thread t2 = new Thread(() -> {
for (int i = 0; i < 10000; i++) {
atomicExample1.increaseCount();
}
});
t1.start();
t2.start();
t1.join();
t2.join();
System.out.println("count = " + atomicExample1.getCount());
}
}
可以看出,上述代码创建了两个线程 t1 和 t2,每个线程增加变量 count 的值 10000 次,最后输出变量的值。其中,我们使用了 AtomicInteger 类型的 count 变量,通过调用 getAndIncrement() 方法实现了对变量 count 的原子性操作。运行示例程序,输出结果为 count = 20000。
示例二:AtomicReference 的使用
import java.util.concurrent.atomic.AtomicReference;
public class AtomicExample2 {
static class User {
private String name;
private int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
private static AtomicReference<User> userAtomicReference = new AtomicReference<>();
public static void main(String[] args) {
User user1 = new User("张三", 20);
User user2 = new User("李四", 25);
// 初始时设置值
userAtomicReference.set(user1);
// 通过 compareAndSet() 方法更新值
userAtomicReference.compareAndSet(user1, user2);
System.out.println(userAtomicReference.get());
}
}
上述代码创建了两个 User 对象,使用 AtomicReference 类型的 userAtomicReference 变量进行引用,通过 set() 方法设置 userAtomicReference 的初始值为 user1。接着,通过 compareAndSet() 方法将 userAtomicReference 的值从 user1 更新为 user2。运行示例程序,输出结果为 User{name='李四', age=25}。
综上所述,Atomic类是Java中原子性操作的一种封装类型,可用于无锁操作,避免多线程竞争问题。使用Atomic类可以提高程序的性能和稳定性,可以用于高并发场景下的数据修改操作。具体使用方式包括get获取当前值、set设置新值、compareAndSet(预期值,更新值)比较并设置新值;以及加、减、增、减等操作。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Atomic类的作用是什么? - Python技术站