public void test(){
Executor executor = Executors.newFixedThreadPool(3);
AtomicInteger atomicInteger = new AtomicInteger(0);
for(int i = 0; i < 10; i++){
executor.execute(()->{
System.out.println("atomicInteger的当前值:" + atomicInteger.addAndGet(1));
});
}
}
//输出如下(输出顺序可能不同,但结果一定是正确的)
atomicInteger的当前值:1
atomicInteger的当前值:2
atomicInteger的当前值:4
atomicInteger的当前值:5
atomicInteger的当前值:3
atomicInteger的当前值:7
atomicInteger的当前值:6
atomicInteger的当前值:9
atomicInteger的当前值:8
atomicInteger的当前值:10
int addAndGet(int i, int delta)
以原子的方式将数组中i位置处的元素值加上delta,返回:i位置处的元素的旧值+ delta
boolean compareAndSet(int i, int expect, int update)
如果当前值等于预期值(数组i位置处的元素),则以原子的方式将数组i位置处的元素值设置为update
public void testAtomicIntegerArray() {
int[] originArray = new int[]{1, 2, 3};
AtomicIntegerArray array = new AtomicIntegerArray(originArray);
array.getAndSet(0, 8);
System.out.println(array.get(0));
System.out.println(originArray[0]);
}
//输出结果:
8
1 ----注意这里,构造方法中是将原数组复制了一份,所以对AtomicIntegerArray的操作,不会影响原数组
class AtomicReferenceExample{
private AtomicReference<User> userAtomicReference = new AtomicReference<>();
@Test
public void test(){
User originUser = new User(18, "小岳");
userAtomicReference.set(originUser);
User updateUser = new User(28, "老岳");
userAtomicReference.compareAndSet(originUser, updateUser);
System.out.println(userAtomicReference.get().getName() + ":" + userAtomicReference.get().getAge());
}
class User{
private String name;
private int age;
public User(int age, String name){
this.name = name;
this.age = age;
}
public int getAge() {
return age;
}
public String getName() {
return name;
}
}
}
//输出如下
老岳:28
class AtomicIntegerFieldUpdaterExample{
private AtomicIntegerFieldUpdater<User> fieldUpdater = AtomicIntegerFieldUpdater.newUpdater(User.class, "age");
@Test
public void test(){
User user = new User(18, "小岳");
fieldUpdater.addAndGet(user, 10);
System.out.println("user现在的年龄:" + fieldUpdater.get(user));
}
class User{
private String name;
public volatile int age;
public User(int age, String name){
this.name = name;
this.age = age;
}
public int getAge() {
return age;
}
public String getName() {
return name;
}
}
}
//输出如下
user现在的年龄:28