线程7 - 线程安全问题

线程安全问题

多个线程并发执行时,修改了共享内存中共享对象的属性,导致数据冲突问题

线程 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;
    }
}
posted @ 2023-01-05 11:19  LaViez  阅读(16)  评论(0)    收藏  举报