AtomicInteger 系列
创建: AtomicInteger atomicInteger = new AtomicInteger();
初始化创建: AtomicInteger atomicInteger = new AtomicInteger(123);
常用方法:
addAndGet(10) 增加后返回增加后的值 ,增加负数就为减法了
getAndAdd() 增加后返回增加前的值
getAndIncrement() 自增返回自增前的值 i++
incrementAndGet() 自增返回增加后的值 ++i
decrementAndGet() 自减 i--
getAndDecrement() 自减 --i
原子性引用型 AtomicReference
原子更新基本类型的AtomicInteger,只能更新一个变量,如果要原子的更新多个变量,就需要使用这个原子更新引用类型提供的类。
public class User {
String name;
int old;
public User(String name, int old) {
this.name = name;
this.old = old;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getOld() {
return old;
}
public void setOld(int old) {
this.old = old;
}
@Override
public String toString() {
return "User [name=" + name + ", old=" + old + "]";
}
}
测试类:
public class Test {
public static void main(String[] args) {
User user = new User("张三", 14);
User user1 = new User("李四", 19);
AtomicReference<User> reference = new AtomicReference<User>();
reference.set(user);
reference.compareAndSet(user, user1);
System.out.println(reference.get().toString());
}
}
更新成功。整个类就以原子的形式更新成功了。
AtomicIntegerFieldUpdater 更新部分字段
注意其中的对象需要使用volitile进行修饰
public class Test {
public static void main(String[] args) {
AtomicIntegerFieldUpdater<User> a = AtomicIntegerFieldUpdater.newUpdater(User.class, "old");
User user = new User("张三", 14);
User user1 = new User("李四", 18);
a.compareAndSet(user1, 18, 20);
System.out.println(user1.toString());
}
}