Java 线程问题,求解

Java线程问题:
代码:

public class Demo01 implements Runnable {

    private boolean falg=true;

    @Override
    public void run() {
        int a=0;
        while (falg){
            System.out.println("线程第"+a+++"次");
            }
        }
    public void myStop(){
            this.falg=false;
    }

    public static void main(String[] args) {
        Demo01 demo01 = new Demo01();
        new Thread(demo01).start();
        for(int b=1;b<20;b++){
            System.out.println("main"+b);
            if (b==15){
                demo01.myStop();
                System.out.println("线程被停止了");
            }
        }
    }
}

当存在主线程打印语句 ( System.out.println("main"+b);)输出结果如下:

img


该效果为我预期效果
当不存在主线程打印语句 ( System.out.println("main"+b);)输出结果如下:

img


我的demo01线程也没有输出打印了,求解

在18、19行中间加一段

        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

你的现象的原因就是,主线程执行太快,子线程还没来得及真正执行,就被”demo01.myStop();“了

不管是run()还是myStop()都属于demo01线程里面的内容,System.out.println("线程第"+a+++"次");也属于demo01线程的过程,把主线程打印语句注释之后,主线程执行太快了,而当b==15时,虽然falg=false了,demo01里面是线程第0次,但因为 demo01.myStop();执行太快, System.out.println("线程第"+a+++"次")还没来得及输出就停止了,而 System.out.println("线程被停止了");是线程外的语句,不受影响。