AtomicXXXFieldUpdater,可以以一种线程安全的方式操作非线程安全对象的某些字段。
例如:1000个人同时向一个账号转账10元钱,那么累计应该增加10000元,除了锁和AtomicLong还可以使用FieldUpdater来实现。
import java.util.concurrent.atomic.AtomicLongFieldUpdater;
public class AtomicLongFieldUpdaterTest {
public static class Account {
private static final AtomicLongFieldUpdater<Account> updater = AtomicLongFieldUpdater.newUpdater(Account.class, "money");
private volatile long money = 0;
public long getMoney() {
return money;
}
public void incrementAndGet(int number) {
updater.addAndGet(this, number);
}
public void incrementAndGet() {
updater.incrementAndGet(this);
}
}
public static void main(String[] args) throws InterruptedException {
Account account = new Account();
for (int i = 0; i < 1000; i++) {
new Thread(() -> {
account.incrementAndGet(10);
}).start();
}
Thread.sleep(500);
System.out.println(account.getMoney());
}
}