【SNAIL】CONNER 2021-10-18 12:51 采纳率: 50%
浏览 23

关于#java#的问题:线程的start方法放的位置不一样,为什么造成的结果也会不一样

static int a = 0;

 Thread thread = new Thread(() -> {
                for (int i = 0; i < 10000; i++) {
                    a++;
                }
        });

      **  thread.start();**
        Thread thread1 = new Thread(() -> {
                for (int i = 0; i < 10000; i++) {
                    a--;
                }
        });
        thread1.start();
        thread.join();
        log.debug("a1===>"+a);
        thread1.join();
//打印结果:
  a1===>10000
----------------------------------------------------------------------------

Thread thread = new Thread(() -> {
                for (int i = 0; i < 10000; i++) {
                    a++;
                }
        });

        Thread thread1 = new Thread(() -> {
                for (int i = 0; i < 10000; i++) {
                    a--;
                }
        });
       ** thread.start();**
        thread1.start();
        thread.join();
        log.debug("a1===>"+a);
        thread1.join();

运行两个线程时,为什么thread.start()这段代码放的位置不同,打印的结果有差异呢。
第一个代码快运行时不会有线程安全问题; 第二个却存在线程安全问题

  • 写回答

1条回答 默认 最新

  • 阿毛~ 2021-10-18 13:33
    关注

    同一个地方,创建两个线程,多运行,你回发现,结果也不一样,这个是线程运行的速度,以及响应计算的速度决定的

    评论

报告相同问题?

问题事件

  • 创建了问题 10月18日

悬赏问题

  • ¥15 C++ yoloV改写遇到的问题
  • ¥20 win11修改中文用户名路径
  • ¥15 win2012磁盘空间不足,c盘正常,d盘无法写入
  • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计
  • ¥70 PlayWright在Java上连接CDP关联本地Chrome启动失败,貌似是Windows端口转发问题
  • ¥15 帮我写一个c++工程
  • ¥30 Eclipse官网打不开,官网首页进不去,显示无法访问此页面,求解决方法
  • ¥15 关于smbclient 库的使用
  • ¥15 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?