版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fengsheng5210/article/details/85058476
停止线程
停止一个线程可以使用Thread.stop()方法,但最好不用它,因为这个方法是不安全的,而且已被弃用。
大多数停止一个线程的操作使用Thread.interrupt()方法,但是这个方法不会终止一个正在运行的线程,还需要加入一个判断才可以完成线程的停止。
Java中有3中停止线程的方法
1:使用退出标志,使线程正常退出,也就是当run方法完成后线程终止。
2:使用stop方法强行终止线程,但是不推荐,因为已经作废,使用会产生不可预料的结果。
3:使用interrupt方法中断线程。
interrupt()
interrupt()方法只是在当前线程中打了一个停止的标记,并不是真的停止线程。
判断线程是否是停止状态
- this.interrupted(); 测试当前线程是否已经中断,当前线程是指运行this.interrupted()方法的线程。
- this.isInterrupted(); 测试线程是否已经中断
总结:
this.interrupted():是一个static方法,测试当前线程是否已经是中断状态,执行后会将状态标志清除为false。
this.isInterrupted():不是static方法,测试线程Thread对象是否已经是中断状态,但不清除状态标志。
通过异常法停止线程
public class MyThread extends Thread{
@Override
public void run() {
for(int i=0;i<500000;i++){
if(this.interrupted()){
System.out.println("已经是停止状态了!我要退出了!");
break;
}
System.out.println("i="+(i+1));
}
System.out.println("执行这句话,说明线程并未停止!");
}
public static void main(String[] args) {
MyThread thread=new MyThread();
try {
thread.start();
thread.sleep(2000);
thread.interrupt();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("执行结束!");
}
}
上述例子说明:线程接受到interrupt()后,for循环执行结束后,线程会继续执行。
小结:抛出异常之后,后面的程序肯定不会再执行了,子线程catch后面都没代码了,还不结束等个鬼啊,这个方法结束子线程不太高大上,土办法!!!