线程的停止,如何停止线程?
stop自带安全隐患,已经过时!
[1]通过控制run()
方法,达到控制线程终止的方式;
class Demo3 extends Thread{
//通过控制run方法,达到控制线程终止的方式
private boolean isrun;
public boolean isIsrun(){
return isrun;
}
public void setIsrun(boolean isrun){
this.isrun = isrun;
}
@SneakyThrows
@Override
public void run(){
while (isrun){
Thread.sleep(400);
System.out.println("线程运行!");
}
System.out.println("子线程运行:"+ System.currentTimeMillis());
}
}
class Demo4{
public static void main(String[] args) throws InterruptedException {
Demo3 demo3 = new Demo3();
//通过控制线程里面的死循环方法
demo3.setIsrun(true);
demo3.start();
Thread.sleep(5000);
demo3.setIsrun(false);
}
}
[2]通过线程的interrupt()
【原理】控制抛出异常的形式,控制方法的执行;
class Demo4{
public static void main(String[] args) throws InterruptedException {
//通过线程的interrupt控制线程的结束
//1.创建一个线程
Thread thread = new Thread(()->{
while (true){
try{
Thread.sleep(500);
//isInterruputed线程中断被忽略,因为在中断时不处于活动状态
//的线程将由此返回false的方法反映出来;
System.out.println(Thread.interrupted());
boolean b = Thread.currentThread().isInterrupted();
System.out.println("子线程运行中..."+b);
}catch (Exception e){
System.out.println("线程中断");
return;
}
}
});
//2.启动线程
thread.start();
//休眠3秒
thread.sleep(10000);
//执行线程中断
//其实就是通过抛出异常的形式 控制方法的执行
//也就是通过调用interrupt()之后就会抛出异常来,就是停止了线程
thread.interrupt();
}
}
[3]粗暴使用stop
:stop方法已经过时,但是还是可以起到停止的作用;