首页 > 其他分享 >线程7 - 线程安全问题

线程7 - 线程安全问题

时间:2023-01-05 11:37:19浏览次数:84  
标签:name Thread t2 t1 问题 安全 线程 user

线程安全问题

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

线程 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

相关文章

  • C# 多线程学习笔记
     ///进程:程序在服务器上运行是,占据的计算资源合集,称之为进程;///进程之间不会相互干扰--进程之间的通信比较困难(分布式)///线程:程序执行的最小单位,相应操作的最小执......
  • 图解背包问题及其优化
    导读^_^背包问题是动态规划的入门经典问题。本文将讲解四种常见的背包问题及其优化方法。背包分类每件/种物品体积Vi不超过背包容量的总价值最大化W(不一定装满)......
  • 判断线程栈爆掉的一种方法
    就是TEB::StackBase-TEB::StackLimit的值约为线程栈保留大小(VC++编译器默认的是1M),就可以判断栈爆掉了。比如:!tebTEBat01192000   ExceptionList:       ......
  • 子父类取值问题
    packagecom.demo;publicclassDemo5{publicstaticvoidmain(String[]args){ //TODOAuto-generatedmethodstub Sonson= newSon(); son.funcher(); }......
  • 线程6 - wait和sleep
    wait和sleep方法比较含义wait:等待,需要等待其他对象来结束该状态sleep:休眠,一定时长后自动醒来从属关系wait:Object类中声明定义的方法,成员方法,所有对象都可使用sl......
  • (MFC)c++字符串相加问题
    在使用CString对象进行相加时,会出现CStringc=CStringA+CStringB;时c只为A,或者B的情况,这种情况不是每次都有的,可以通过每次相加之前releasebuffer的方式来释放缓冲区,......
  • C++不知算法系列之迷宫问题中的“见山不是山”
    1.前言迷宫问题是一类常见的问题。初识此类问题,应该是“见山是山”,理解问题的原始要求,便是查找从起点到终点的可行之路。有了广泛的知识体系之后,应该是"见山不是山"。会......
  • ssh免密登录问题
    执行ssh-copy-id遇到/usr/bin/ssh-copy-id:ERROR:@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ERROR:@WARNING:REMOTEHOSTIDENTIFICATIONHA......
  • CPU爆了,你却连那个线程出问题都不知道?
    转载自:https://mp.weixin.qq.com/s/FvmlnV-oKNxrK5glrFKPHA如何看查占用cpu最多的进程?方法一核心指令:ps实际命令:psH-eopid,pcpu|sort-nk2|tail执行效果如下:[work@......
  • 线程4 - 线程池
    线程池线程对象的容器4种比较常见的线程池创建固定数量的线程对象ExecutorServiceexecutorService=Executors.newFixedThreadPool(3);根据需要动态创建线......