线程的一个小问题
public class TestThread {
public static void main(String args[]){
Runner r = new Runner();
Thread t = new Thread(r);
t.start();
for(int i=0;i<100000;i++){
if(i%10000==0 && i>0)
System.out.println("in thread main i=" + i);
}
System.out.println("Thread main is over");
r.shutDown();
}
}
class Runner implements Runnable {
private boolean flag=true;
public void run() {
int i = 0;
while (flag==true) {
System.out.print(" " + i++);
}
}
public void shutDown() {
flag = false;
}
}
很简单的一个小程序,用shutDown方法来停止线程,为什么运行结果后是在执行了System.out.println("Thread is over");后又执行了一遍falg==true时的System.out.print(" "+ i++);而不是立即停止整个程序呢?
------解决方案--------------------
两个线程,工作是异步的。
相同时间内,两个线程所执行的指令个数,也是不相同的;
并且,由于线程的当前环境差异,每次相同时间内执行的指令个数都未必相同。
所以,调用shutdown方法,是会停止runner线程,但是,未必是立即停止。
也就是说,调用shutdown方法后,有可能runner不执行循环体就结束了;
也有可能会执行一次循环体;当然,也有可能执行多次循环体才停下。