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());
}
}


本文介绍如何使用AtomicLongFieldUpdater实现线程安全地更新账户余额。通过一个转账场景的例子,演示了1000个线程并发向同一账户转账10元时,如何确保最终账户余额正确增加10000元。
10万+

被折叠的 条评论
为什么被折叠?



