背景
多线程的线程中止。
实现
多线程的线程中止不建议使用JDK提供的stop()、destory()等已废弃的方法,建议使用一个标识位来中止线程的执行。
代码
注:
- 主线程的循环次数尽可能的设置大一些才可以看到效果。否则主线程已经执行完毕,子线程仍未开始执行,这样看不到效果。具体视电脑性能而定。
package com.aac;
public class ThreadStop implements Runnable{
//1.定义线程体使用的标识位
private boolean flag = true;
@Override
public void run() {
int j = 0 ;
//2.线程体使用该标识
while(flag){
System.out.println("run...Thread..." + j++);
}
}
//3.对外提供方法改变标识
public void stop(){
this.flag=false;
}
public static void main(String[] args) {
ThreadStop testThread = new ThreadStop();
new Thread(testThread).start();
for (int i = 0; i < 5000; i++) {
System.out.println("main..."+i);
if (i == 4500){
//调用stop()方法切换标识位,让线程中止
testThread.stop();
System.out.println("子线程中止了");
}
}
}
}
效果
总结
多线程的中止需要注意:
- 不推荐JDK提供的stop()、destory()方法,已废弃使用;
- 推荐线程完成执行自动停止;
- 当需要“手动中止”线程时,建议使用一个标识位进行中止线程(此博文案例)。