千家信息网

AtomicIntegerFieldUpdater怎么使用

发表于:2024-11-20 作者:千家信息网编辑
千家信息网最后更新 2024年11月20日,本篇内容主要讲解"AtomicIntegerFieldUpdater怎么使用",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"AtomicIntegerFie
千家信息网最后更新 2024年11月20日AtomicIntegerFieldUpdater怎么使用

本篇内容主要讲解"AtomicIntegerFieldUpdater怎么使用",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"AtomicIntegerFieldUpdater怎么使用"吧!

AtomicXXXFieldUpdater,就是可以以一种线程安全的方式操作非线程安全对象的某些字段。

举例:1000个人同时向一个账号转账一元钱,那么累计应该增加1000元,除了锁和AtomicInteger还可以使用FieldUpdater来实现。

账号类-BackAccount

import java.util.concurrent.atomic.AtomicIntegerFieldUpdater;public class BackAccount {    private volatile int money;    private static final AtomicIntegerFieldUpdater  updater = AtomicIntegerFieldUpdater.newUpdater(BackAccount.class, "money");    BackAccount(int money) {        this.money =  money;    }    public void incMoney() {        // 通过AtomicIntegerFieldUpdater操作字段        updater.incrementAndGet(this);    }    public int getMoney() {        return money;    }}

任务类-Task

public class Task implements Runnable {    private BackAccount backAccount;    Task(BackAccount account) {        this.backAccount = account;    }    @Override    public void run() {        backAccount.incMoney();    }}

启动类

import java.util.ArrayList;import java.util.List;public class Main {    public static void main(String[] args) throws InterruptedException {        BackAccount account = new BackAccount(0);        List list = new ArrayList<>();        for(int i = 0; i < 1000 ; i++) {            Thread t = new Thread(new Task(account));            list.add(t);            t.start();        }        for(Thread t : list) {            t.join();        }        System.out.println(account.getMoney());    }}

运行结果

到此,相信大家对"AtomicIntegerFieldUpdater怎么使用"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

0