清风羽 2021-06-21 19:23 采纳率: 0%
浏览 104

为什么子线程加入System.out.println语句会导致子线程停止了

如下代码一;

public class Stopdemo {

    //public volatile static boolean  stop = false;
    public  static boolean  stop = false;
    public static void main(String[] args) throws InterruptedException {
        Thread t1 = new Thread(new StopThread());
        t1.start();
        TimeUnit.SECONDS.sleep(2);
        stop = true;
        System.out.println("赋值 stop = true");

    }
    static class StopThread implements Runnable{

        @Override
        public void run() {
            int i = 0;
            while(!stop) { //while(true)
                i++;

            }
            System.out.println("运行结束: "+i);
        }

    }

}

运行结果为:线程不会中止推出一直循环

 

而若在子线程的while循环中加入System.out.println("运行中"); 则程序运行 一会后会 自动正常

Process finished with exit code 0 似乎是 赋值 stop = true 生效了导致 线程运行结束, 大神帮忙解答一下为什么 谢谢

public class Stopdemo {

    //public volatile static boolean  stop = false;
    public  static boolean  stop = false;
    public static void main(String[] args) throws InterruptedException {
        Thread t1 = new Thread(new StopThread());
        t1.start();
        TimeUnit.SECONDS.sleep(2);
        stop = true;
        System.out.println("赋值 stop = true");

    }
    static class StopThread implements Runnable{

        @Override
        public void run() {
            int i = 0;
            while(!stop) { //while(true)
                i++;
             System.out.println("运行中");
            }
            System.out.println("运行结束: "+i);
        }

    }

}
  • 写回答

1条回答 默认 最新

  • 咕泡-川南 2021-07-13 21:28
    关注

    其实这个问题就是线程安全性的可见性问题,没有加输出语句之前,线程是读不到stop 修改后的值;加了System.out.println("运行中"); 会让stop变量在while(!stop){} 这个线程中同步读到,其实这是底层深度优化后的结果 希望对你有帮助,望采纳

    评论

报告相同问题?

悬赏问题

  • ¥15 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图