多线程学习(四):停止线程

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fengsheng5210/article/details/85058476

停止线程

停止一个线程可以使用Thread.stop()方法,但最好不用它,因为这个方法是不安全的,而且已被弃用。
大多数停止一个线程的操作使用Thread.interrupt()方法,但是这个方法不会终止一个正在运行的线程,还需要加入一个判断才可以完成线程的停止。
Java中有3中停止线程的方法
1:使用退出标志,使线程正常退出,也就是当run方法完成后线程终止。
2:使用stop方法强行终止线程,但是不推荐,因为已经作废,使用会产生不可预料的结果。
3:使用interrupt方法中断线程。

interrupt()

interrupt()方法只是在当前线程中打了一个停止的标记,并不是真的停止线程。
在这里插入图片描述

判断线程是否是停止状态

  1. this.interrupted(); 测试当前线程是否已经中断,当前线程是指运行this.interrupted()方法的线程。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  2. 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后面都没代码了,还不结束等个鬼啊,这个方法结束子线程不太高大上,土办法!!!

猜你喜欢

转载自blog.csdn.net/fengsheng5210/article/details/85058476
今日推荐