123.线程的停止,如何停止线程?

线程的停止,如何停止线程?

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方法已经过时,但是还是可以起到停止的作用;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值