循环时,多线程处理的对象被更新
需要注意每次的循环调用 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)