package com.thread.killthread;
/**
* 使用守护线程的方式杀死线程
*/
public class EndOfViolenceToKillThread{
private Thread executeThread;
private boolean flag = false;
public void execute(Runnable task){
//执行线程
executeThread = new Thread(){
@Override
public void run() {
Thread thread1 = new Thread(task);
thread1.setDaemon(true);
thread1.start();
try {
thread1.join();//让执行线程block住,等待守护线程执行
flag = true;
} catch (InterruptedException e) {
// e.printStackTrace();
}
}
};
executeThread.start();
}
public void shoutDown(long mills){
long currentTimeMills = System.currentTimeMillis();
while (!flag){
if ((System.currentTimeMillis()-currentTimeMills)>=mills){
System.out.println("运行超时,强行结束");
executeThread.interrupt();
break;
}
try {
Thread.sleep(1);
} catch (InterruptedException e) {
break;
}
}
flag = false;
}
}
class EndOfViolenceToKillThreadTest{
public static void main(String[] args) {
EndOfViolenceToKillThread endOfViolenceToKillThread = new EndOfViolenceToKillThread();
long start = System.currentTimeMillis();
endOfViolenceToKillThread.execute(()->{
// while (true){
//
// }
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
});
endOfViolenceToKillThread.shoutDown(5000);
long end = System.currentTimeMillis();
long var = end-start;
System.out.println(end-start);
}
}
结束线程的方式三
最新推荐文章于 2021-02-16 05:40:53 发布