版权声明:一起学习一起进步。如果正好对你有帮助的话,很开心 https://blog.csdn.net/wang0112233/article/details/83340411
第一种方式是通过一个开关控制
public class ThreadCloseGraceful {
private static class Worker extends Thread {
private volatile boolean start = true;
@Override
public void run() {
while (start) {
//
}
}
public void shutdown() {
this.start = false;
}
}
public static void main(String[] args) {
Worker worker = new Worker();
worker.start();
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
worker.shutdown();
}
}
第二种方式是通过打断interrupt打断线程
public class ThreadCloseGraceful2 {
private static class Worker extends Thread {
@Override
public void run() {
while (true) {
if (Thread.interrupted())
break;
}
//-------------
//-------------
//-------------
}
}
public static void main(String[] args) {
Worker worker = new Worker();
worker.start();
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
worker.interrupt();
}
}
汪文君老师的多线程,这边是比较完美的状态,但是常常我们在项目中可能不会有这样一个flag或者也不会抛出这个异常
那么我们可以使用一种类似stop的方式(自己写一个stop)来结束它