1.通过设置flag终止线程的生命周期
public class ThreadCloseGraceful {
private static class Worker extends Thread{
private volatile boolean start = true;
@Override
public void run() {
while(start) {
System.out.println("----");
}
}
public void shutdown() {
this.start = false;
}
}
public static void main(String[] args) {
Worker worker = new Worker();
worker.start();
try {
Thread.sleep(10000);//让worker先工作10秒,10秒之后,停止worker线程
} catch (InterruptedException e) {
e.printStackTrace();
}
worker.shutdown();
}
}
2.暴力结束线程,通过守护线程的方式
package com.picc.concerrent.chapter6;
public class ThreadService {
private Thread executeThread;
private boolean finished = false;
public void execute(Runnable task){
executeThread = new Thread(){
@Override
public void run() {
Thread runner = new Thread(task);
runner.setDaemon(true);
runner.start();
try {
runner.join();
finished = true;
} catch (InterruptedException e) {
// e.printStackTrace();
}
}
};
executeThread.start();
}
public void shutsown(long mills) {
long currentTime = System.currentTimeMillis();
while (!finished){
if (System.currentTimeMillis()-currentTime>=mills) {
System.out.println(“任务超时,需要结束”);
executeThread.interrupt();
break;
}
try {
executeThread.sleep(1);
} catch (InterruptedException e) {
System.out.println(“执行线程被打断”);
break;
}
}
finished = false;
}
public static void main(String[] args) {
ThreadService service=new ThreadService();
long start = System.currentTimeMillis();
service.execute(()->{
// while(true){
//
// }
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
});
service.shutsown(10000);
long end = System.currentTimeMillis();
System.out.println(end-start);
}
}