AtomicReference示例
- 对指定类的指定int字段的原子性更新;
- 被操作的字段必须用votatile修饰;
import com.example.concurrency.annotations.ThreadSafe;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import java.util.concurrent.atomic.AtomicIntegerFieldUpdater;
@Slf4j
@ThreadSafe
public class AtomicExample5 {
private static AtomicIntegerFieldUpdater<AtomicExample5> updater =
AtomicIntegerFieldUpdater.newUpdater(AtomicExample5.class, "count");
@Getter
public volatile int count = 100;
public static void main(String[] args) {
AtomicExample5 example5 = new AtomicExample5();
if (updater.compareAndSet(example5, 100, 120)) {
log.info("update success 1, {}", example5.getCount());
}
if (updater.compareAndSet(example5, 100, 120)) {
log.info("update success 2, {}", example5.getCount());
} else {
log.info("update failed, {}", example5.getCount());
}
}
}
输出:
13:23:38.509 [main] INFO com.example.concurrency.example.atomic.AtomicExample5 - update success 1, 120
13:23:38.515 [main] INFO com.example.concurrency.example.atomic.AtomicExample5 - update failed, 120