Java怎么停止正在运行的线程?
现在没有很好的方式立刻强制停止正在运行的线程,在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();
内容