线程安全问题
多个线程并发执行时,修改了共享内存中共享对象的属性,导致数据冲突问题
线程 t1 和线程 t2 都修改和读取同一个对象 user,由于并发执行,t1写入后没有直接读取,此时 t2 也在执行,进行写入,然后 t1 t2 再分别读取,此时对象的数据是 t2写入的结果,t1的写入被覆盖了。
每一个线程都有独享的栈内存
对象和对象的属性存放在共享内存 -- 堆中
public class ThreadSecurity {
public static void main(String[] args) {
User2 user = new User2();
Thread t1 = new Thread(() -> {
user.setName("AA");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(user.getName());
});
Thread t2 = new Thread(() -> {
user.setName("SS");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(user.getName());
});
t1.start();
t2.start();
System.out.println("main线程执行完毕。");
}
}
class User2{
private String name;
public void setName(String name){
this.name = name;
}
public String getName(){
return this.name;
}
}
标签:name,Thread,t2,t1,问题,安全,线程,user
From: https://www.cnblogs.com/Ashen-/p/17027028.html