Java怎么停止正在运行的线程?

Java怎么停止正在运行的线程?

javathread
1
206
小课
小课2022-05-25 16:15
1 个回答

现在没有很好的方式立刻强制停止正在运行的线程,在JDK1.2之前,有一个thread.stop()方法用于强制停止当前运行的线程,但是在JDK1.2时已经标记为过时了,具体原因可以查看Why Are Thread.stop, Thread.suspend, Thread.resume and Runtime.runFinalizersOnExit Deprecated?

对于一些处于等待中的线程,比如调用了Object.wait(),Thread.sleep(long),Lock.lockInterruptibly(),这些线程可以通过Thread.interrupt()使其抛出InterruptedException异常,然后在异常捕获后实现退出逻辑。

1Thread t = new Thread(() -> {
2    ...
3    try {
4        synchronized (lockObj) {
5            lockObj.wait();
6        }
7    } catch (InterruptedException e) {
8        //直接退出
9        return;
10    }
11    ...
12});
13...
14t.interrupt();

对于在循环体中处理逻辑的线程,可以定义个标识,用于判断是否需要退出。

1class Task implements Runnable {
2
3    private volatile boolean canceled;
4
5    public void cancel() {
6        canceled = true;
7    }
8
9    @Override
10    public void run() {
11        while(!canceled) {
12            ...
13        }
14    }
15}
16...
17task.cancel();
1
已修改
小课
小课2022-05-25 17:37
你的回答

内容