java 循环时,多线程处理的对象被更新,问题排查

循环时,多线程处理的对象被更新
需要注意每次的循环调用 new 一个对象
原因:不使用多线程是为本地过程调用不会在打印之前再操作对象

import lombok.Data;
import lombok.val;

import java.util.ArrayList;

public class Demo {
    public static void main(String[] args) {
        val names = new ArrayList<String>();
        names.add("a");
        names.add("b");
        names.add("c");
        names.add("d");
        String temp ;
        val user = new User();
        for (String name : names) {
            //循环打印时,若调用本地方法,多线程时,每次都有new一个对象
            //否则打印时,对象已更改
            user.setName(name);
            temp = name;
            new Thread( () -> System.out.println(user)).start();
//            new Thread( () -> System.out.println(name)).start();
        }
    }

    @Data
    static class User{
        String name;
    }
}

打印结果可能是:
Demo.User(name=d)
Demo.User(name=d)
Demo.User(name=d)
Demo.User(name=d)

也可能是
Demo.User(name=a)
Demo.User(name=c)
Demo.User(name=d)
Demo.User(name=d)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值