关于线程同步中的AtomicInteger自增问题

本文探讨了AtomicInteger在线程同步中的使用,虽然其保证了原子性,但在多线程环境下,线程可能在自增前获取到旧值,导致数据错乱。通过代码示例展示了问题,并提出解决方案:线程内部复制ai的值到局部变量再进行操作,以避免并发问题。
摘要由CSDN通过智能技术生成

AtomicInteger虽然是原子性的Integer类型,在赋值,自增上,不能被其他线程打断,从而保证了数据的安全性,但是,在线程作用范围较小的情况下,虽然是不能被打断的,但是在自增之前,线程已经抢先运行了还未自增前的值,这样又导致了数据错乱。
下面用代码来解释下

public class Test {
   
    private static final ThreadPoolExecutor EXECUTOR;

    static {
   
        EXECUTOR = new ThreadPoolExecutor(4, 5, 2000, TimeUnit.SECONDS, new LinkedBlockingDeque<>());
    }

    public static void main(String[] args) {
   
        File file = new File("D:\\javacccc\\eee\\");
        List<String> list = new CopyOnWriteArrayList<String>();
        getFile(file, list);
        // System.out.println(list);
        AtomicInteger ai = new AtomicInteger(0);
        for (int i = 0; i < list.size(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值