推荐答案
在 Java 中,停止一个线程的推荐方法是使用 interrupt() 方法。通过调用线程的 interrupt() 方法,可以中断线程的执行,线程可以通过检查中断状态来决定是否停止执行。
// www.javascriptcn.com code example
public class MyThread extends Thread {
@Override
public void run() {
while (!Thread.currentThread().isInterrupted()) {
// 线程执行的代码
System.out.println("Thread is running...");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// 捕获到中断异常,退出循环
System.out.println("Thread interrupted, exiting...");
Thread.currentThread().interrupt(); // 重新设置中断状态
break;
}
}
}
public static void main(String[] args) throws InterruptedException {
MyThread thread = new MyThread();
thread.start();
Thread.sleep(5000); // 主线程休眠5秒
thread.interrupt(); // 中断子线程
}
}本题详细解读
1. 使用 interrupt() 方法
interrupt() 方法是 Java 中推荐的中断线程的方式。它不会立即停止线程,而是设置线程的中断状态。线程可以通过检查 isInterrupted() 方法来检测中断状态,并决定是否停止执行。
2. 处理 InterruptedException
当线程处于 sleep()、wait() 或 join() 等阻塞状态时,调用 interrupt() 方法会抛出 InterruptedException。捕获到这个异常后,通常需要重新设置中断状态,以确保线程能够正确退出。
3. 为什么不能使用 stop() 方法
stop() 方法已经被废弃,因为它会强制终止线程,可能导致资源未释放或数据不一致的问题。使用 interrupt() 方法可以让线程有机会清理资源并安全退出。
4. 检查中断状态
在循环中,可以通过 Thread.currentThread().isInterrupted() 来检查中断状态。如果线程被中断,isInterrupted() 会返回 true,从而退出循环。
5. 重新设置中断状态
在捕获到 InterruptedException 后,通常需要调用 Thread.currentThread().interrupt() 来重新设置中断状态,以确保后续代码能够正确检测到中断。
通过这种方式,可以安全、优雅地停止一个线程的执行。