跳到主要内容

如何停⽌线程运⾏?

参考答案:

在Java中,停止一个线程运行的方法主要有三种:使用退出标志、使用stop()方法(不推荐)、使用interrupt()方法。但是,请注意,线程并不能被立即停止,因为线程可能在任何时候执行任何代码,所以直接停止线程可能导致不可预测的后果。

  1. 使用退出标志:一种常见的做法是在线程类中设置一个布尔类型的退出标志,当需要停止线程时,将该标志设置为true。线程在每次循环或关键操作前检查这个标志,如果标志为true,则线程退出。
class MyThread extends Thread {
    private volatile boolean running = true;

    public void run() {
        while (running) {
            // do something
        }
    }

    public void shutdown() {
        running = false;
    }
}

然后,你可以通过调用shutdown()方法来停止线程。

  1. 使用stop()方法Thread.stop()方法已被废弃,因为它可能导致线程在执行关键操作时被突然停止,从而产生不可预测的后果。因此,不推荐使用此方法。
  2. 使用interrupt()方法interrupt()方法不会立即停止线程,而是设置线程的中断状态。线程需要定期检查这个中断状态,并在适当的时候停止执行。
class MyThread extends Thread {
    public void run() {
        while (!Thread.interrupted()) {
            // do something
        }
    }
}

你可以通过调用interrupt()方法来请求线程停止。

在所有这些情况下,线程都需要在适当的时候检查退出条件或中断状态,并主动停止执行。没有一种方法可以立即停止一个线程,因为这可能导致线程在执行关键操作时被突然中断,从而产生不可预测的后果。

另外,需要注意的是,如果你的线程持有某个锁或资源,那么在停止线程之前,你需要确保线程已经释放了这些资源,否则可能会导致死锁或其他问题。