停止一个线程意味着在线程处理完任务之前停掉正在做的操作,也就是放弃当前的操作。在 Java 中有3种方法可以终止正在运行的线程:
- 当 run() 方法完成后线程终止。
- 使用 Thread.stop() 方法(不i推荐),但是 stop() 和 suspend() 及 resume() 一样,都是作废的方法,不安全的而且已经被官方放弃使用。
- 使用 Thread.interrupt() 方法。(推荐)
# 使用 interrupt() 方法来停止线程
调用 interrupt() 方法仅仅是在当前线程中打了一个停止的标记,并不是真正停止线程。Thread.java 类中提供了两个方法来判断一个线程的状态是否处于停止状态:
- public static boolean interrupted():注意这是一个静态方法,测试 当前线程 是否已经中断,并且执行该方法后具有将状态标志重置为 false 的功能。
- public boolean isInterrupted():注意这是一个实例方法。测试线程对象 myThread 是否已经处于中断状态,但不清除中断标志。
“抛异常法” 实现线程的停止(推荐)
1 | public class MyThread extends Thread{ |
在沉睡中停止线程
如果线程在 sleep() 状态下停止线程,会是什么效果?答案是会引发 InterruptedException,进入 catch 语句,并且清除停止状态标记,重新复位为 false。如果是相反的操作,先停止后遇到 sleep(),也会引发同样的异常。
使用 return 停止线程(不推荐)
将方法 interrupt() 与 return 结合使用也能实现停止线程的效果。