Java多线程相关知识【3】–线程停止
菜鸟的一个学习笔记,欢迎大神指导批评。
一、强制停止(不建议)
调用线程的~~~.stop()~~(此方法已被Java停用)方法,即可立即停止运行的线程,但这样,可能造成的结果是,有些资源没有释放,甚至容易出现问题,故不建议进行强制结束进程。
强制结束进程的代码操作如下,首先先运行一个线程,然后使用.~~~stop()~~~方法强制停止。具体的操作如下:
Thread tRL=new Thread(()->{
//do some thing
});
tRL.start();
tRL.stop();
二、优雅的停止(建议)
1.标志位停止
在进程内设置一个标识位,进行循环执行,当执行到某处时,认为进程完成了某些逻辑,即自动的停止本进程,具体实现如下。
boolean complite=true;//假设这个任务完成了
new Thread(()->{
boolean stopit=false;
while (!stopit){
//do some thing ...
if(complite){
stopit=true;
}
}
}).start();
2.中断停止
使用线程提供的interrupt()方法实现线程的中断,在线程内判断是否产生了中断,若产生了中断,则使用break进行相关进程的中断。
第一种停止方式
手动判断中断信号,然后进行线程的停止。
Thread t =new Thread(()->{
while (true){
if (Thread.currentThread().isInterrupted()){
System.out.println("i'm will stop");
break;
}
//do some thing ...
}
});
t.start();
t.interrupt();
第二种方式
利用异常处理,使得阻塞中的进程进行中断信号的获取。
Thread t2 =new Thread(()->{
boolean stopit=false;
try {
while (true){
Thread.sleep(1);
}
}catch (InterruptedException e){
//do some thing ...
}
});
t2.start();
t2.interrupt();