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);)输出结果如下:
在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("线程被停止了");是线程外的语句,不受影响。