如何安全关闭线程

如何安全关闭线程

课程介绍了stop()强制关闭线程,但是同时也说了,该方法不建议使用,过于暴力。

那么如何才能让线程安全关闭呢?为什么课程都没有介绍到?

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好,interrupt();方法可以理解为是中断线程,他不能中断正在运行中的线程,可以改变运行状态

如果要使用interrupt();方法使正在运行的线程停止可以结合isInterrupted()方法,该方法是用来判断此线程是否被中断,当isInterrupted()true时,可以添加个return来结束该线程

如:


http://img1.sycdn.imooc.com//climg/5f91650309b50ba105940340.jpg

综上,interrupt()在普通线程的使用上也是有意义的,但他是用来中断线程而已


祝学习愉快


好帮手慕阿园 2020-10-21 13:48:23

同学你好

1,可以设置一个flag标志位,停止线程

public class StopThread implements Runnable {
    //停止线程的标记值boolean;
    private boolean flag = true;

    public void stopThread() {
        flag = false;
    }

    public void run() {
        int i = 0;
        while (flag) {
            i++;
            System.out.println(Thread.currentThread().getName() + ":" + i);
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) {
        StopThread st = new StopThread();
        Thread th = new Thread(st);
        th.start();
        try {
            Thread.sleep(5500);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
//        th.stop();
        st.stopThread();

    }
}

2,可以使用 interrupt 方法中断线程,比如:

public class InterruptThread extends Thread{

    public static void main(String[] args) {
        try {
            InterruptThread t = new InterruptThread();
            t.start();
            Thread.sleep(2000);
            t.interrupt();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void run() {
        super.run();
        for(int i = 0; i <= 200000; i++) {
            System.out.println("i=" + i);
        }
    }
    
}

祝学习愉快

  • 提问者 慕丝1539783 #1
    t.interrupt();这个方法是给线程设置标志位为true,但是好像也一直会等到线程任务执行结束后,才会关闭,这个interrupt()方法如果是创建普通线程的话,是不是没有意义?还是说interrupt()方法要配合线程池使用?
    2020-10-22 17:25:38
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师