线程停止的方式有两种情况:
1.线程正常执行完成;
2.线程被强制终止。强制终止两种不推荐使用的方法:stop()和destory();
在不使用第二种情况下达到线程终止的效果,可以使用外部标识对线程run()进行干预
废话不多说:
public class TestStop implements Runnable{
public boolean flag=true;//定义标识变量
public void run() {
int num=0;
while(flag){//线程run方法与标识变量关联
System.out.println("====>子线程执行次数"+num++);
}
}
public void stop(){//外部干预方法,在调用后对标识变量进行修改达到终止线程的作用
this.flag=false;
}
public static void main(String[] args) {
TestStop ts=new TestStop();
new Thread(ts).start();
for(int i=0 ;i<10;i++){
if(i==8){
ts.stop();///是时候调用干预方法进行修改标识变量
System.out.println("====>干预子线程使其终止运行");
}
System.out.println("====>主线程执行次数"+i+"=====外部标识的值为"+ts.flag);
}
}
}
结果:子线程star()后就处于就绪状态,等待调度,如果获得了cpu的时间片就进入运行状态。
每一次的运行结果都几乎是不一样的,因为子线程和主线程的运行是相互之间不影响的。