前面提到过三种停止线程的方式,这三种方式不是被废弃就是可能造成return污染,最后虽然建议用抛异常法,但抛异常法依靠的是异常处理机制,下面介绍一种更常用的的停止线程的方法:通过在实现Runnable接口的类里面(或者是在继承Thread类的类里面)定义一个boolean类型的变量(标记),然后对变量(标记)进行判断处理,从而达到停止线程的目的。
下面是简单示例:
/*
* 如何正常终止一个线程?
* 需求:线程启动5s之后停止
*/
public class Test {
public static void main(String[] args) throws InterruptedException {
MyRunnable myRunnable = new MyRunnable();
Thread t1 = new Thread(myRunnable);
//设置线程的名称为t1
t1.setName("t1");
t1.start();
// 5s之后
Thread.sleep(5000);
// 通过置boolean类型的变量isRun的值为false使线程终止
myRunnable.isRun = false;
}
}
/*
* 通过在实现Runnable接口的类里面(或者是在继承Thread类的类里面)定义一个boolean类型的变量,然后对变量进行判断处理,
* 从而达到停止线程的目的
*/
class MyRunnable implements Runnable {
// 定义一个boolean类型的变量,初始值为true
boolean isRun = true;
// 实现接口中的run方法
@Override
public void run() {
for (int i = 0; i < 10; i++) {
// 判断如果为真,正常执行,否则return
if (isRun) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + "---->" + i);
} else {
return;
}
}
}
}
运行结果如图所示:
运行结果图
由图可知,线程启动5s后成功停止。