Atomic 类是 Java 并发包 java.util.concurrent.atomic 中的一个子包,它提供了一系列原子操作类,这些类可以保证在多线程环境下的线程安全性。原子操作是指不可被中断的一个或一系列操作,要么全部执行成功,要么都不执行。
以下是使用 Atomic 类保证线程安全的一些常见方法:
AtomicInteger、AtomicLong 等原子整数类这些类提供了对单个变量的原子操作,如增加、减少、比较并交换(compare-and-swap)等。
import java.util.concurrent.atomic.AtomicInteger;
public class AtomicExample {
private AtomicInteger counter = new AtomicInteger(0);
public void increment() {
counter.incrementAndGet(); // 原子地增加值
}
public int getCounter() {
return counter.get(); // 获取当前值
}
}
AtomicBoolean 等原子布尔类这些类提供了对单个布尔变量的原子操作。
import java.util.concurrent.atomic.AtomicBoolean;
public class AtomicBooleanExample {
private AtomicBoolean flag = new AtomicBoolean(false);
public void setFlag(boolean newValue) {
flag.set(newValue); // 设置新值
}
public boolean getFlag() {
return flag.get(); // 获取当前值
}
public boolean compareAndSet(boolean expectedValue, boolean newValue) {
return flag.compareAndSet(expectedValue, newValue); // 比较并设置
}
}
AtomicReference 等原子引用类这些类提供了对单个引用变量的原子操作。
import java.util.concurrent.atomic.AtomicReference;
public class AtomicReferenceExample {
private AtomicReference<String> reference = new AtomicReference<>("initial");
public void setReference(String newValue) {
reference.set(newValue); // 设置新值
}
public String getReference() {
return reference.get(); // 获取当前值
}
public boolean compareAndSet(String expectedValue, String newValue) {
return reference.compareAndSet(expectedValue, newValue); // 比较并设置
}
}
AtomicIntegerFieldUpdater、AtomicLongFieldUpdater 等原子字段更新器这些类允许你对类的字段进行原子更新,而不需要使用锁。
import java.util.concurrent.atomic.AtomicIntegerFieldUpdater;
public class AtomicFieldUpdaterExample {
private volatile int counter = 0;
private static final AtomicIntegerFieldUpdater<AtomicFieldUpdaterExample> updater =
AtomicIntegerFieldUpdater.newUpdater(AtomicFieldUpdaterExample.class, "counter");
public void increment() {
updater.incrementAndGet(this); // 原子地增加值
}
public int getCounter() {
return counter; // 获取当前值
}
}
Atomic 类时,通常不需要额外的同步机制,因为它们已经提供了原子操作。Atomic 类和其他并发工具(如 Lock、Semaphore 等)来实现更复杂的并发控制。AtomicIntegerFieldUpdater、AtomicLongFieldUpdater 等更新器时,确保字段是 volatile 的,以保证可见性。通过合理使用这些原子操作类,可以有效地保证多线程环境下的线程安全性。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。