要停止一个正在运行的Java线程,有以下几种方法:

  1. 设置标志位:在线程中设置一个标志位,当该标志位被设置时,线程会自行停止运行。例如:
public class MyThread extends Thread {
    private volatile boolean stop = false;

    public void stopThread() {
        stop = true;
    }

    public void run() {
        while (!stop) {
            // 线程逻辑
        }
    }
}

在这个示例中,我们创建了一个MyThread类,它继承自Thread类。这个类包含了一个名为stop的volatile变量,这个变量被用来作为线程运行状态的标志位。我们还实现了一个stopThread()方法来设置这个标志位,以便停止线程运行。

  1. 使用interrupt()方法:可以在另一个线程中调用目标线程的interrupt()方法来请求它停止运行。例如:
public class MyThread extends Thread {
    public void run() {
        while (!Thread.currentThread().isInterrupted()) {
            // 线程逻辑
        }
    }
}

在这个示例中,我们使用Thread.currentThread().isInterrupted()方法来检查线程是否应该停止运行。当另一个线程调用了MyThread的interrupt()方法时,当前线程就会抛出一个InterruptedException异常,从而使线程停止运行。

  1. 使用stop()方法:这是一种不推荐使用的方法,因为它可能会导致线程意外停止,从而产生安全性问题。但是,为了完整起见,我们在这里还是介绍一下stop()方法。例如:
public class MyThread extends Thread {
    public void run() {
        while (true) {
            try {
                // 线程逻辑
            } catch (InterruptedException ex) {
                break;
            }
        }
    }
}

在这个示例中,我们创建了一个MyThread类,它继承自Thread类。在run()方法中,我们使用while(true)来表示线程应该一直运行下去,直到被中断。当另一个线程调用了MyThread的stop()方法时,线程就会立即停止运行。这种方法可能会导致线程在执行过程中突然停止,从而导致数据丢失和其他意外情况。因此,不建议使用这种方法。

总之,在Java中停止一个正在运行的线程主要有以下三种方法:设置标志位、使用interrupt()方法和使用stop()方法。其中,前两种方法是常用的方法,尽量避免使用stop()方法。

总结:

1、使用退出标志,使线程正常退出,也就是当run方法完成后线程终止。

2、使用stop方法强行终止,但是不推荐这个方法,因为stop和suspend及resume一样都是过期作 废的方法。

3、使用interrupt方法中断线程。