最后的思考题

来源:3-3 Java线程停止广为流传的错误方法---interrupt方法

我是猫_夏

2018-07-17 17:31

所以除了设置状态标志,还有什么退出线程的方法呢???

写回答 关注

5回答

  • MrZhen
    2018-07-18 14:20:13
    已采纳

    在catch中再次调用interrupt()就OK了

    霸气小肆毛 回复惨的一

    当重新调用子线程的interrupt()方法时,也就是重新给子线程的中断状态设置为true,则子线程的isInterrupted()方法或者interrupted()方法能够正确返回子线程的中断状态(为true),然后while循环中不满足,就可以退出循环,结束线程了

    2019-03-30 17:23:21

    共 3 条回复 >

  • tiger爱小狄
    2019-07-04 15:15:19

    也可以在catch中写一个 break;

  • 我爱孙佳怡
    2019-05-22 11:59:34

    在catch中加入interruput()后,有点不太明白,退出是能退出,但是Thread running少打印了一次啊

    我爱孙佳怡

    刚才试了下,没错,没少打印,自己看错了

    2019-05-22 12:00:40

    共 1 条回复 >

  • 慕先生0191147
    2018-08-23 10:07:06

    package imooc.concurrent;


    public class WrongWayStopThread extends Thread {

    public static void main(String[] args) {


    WrongWayStopThread thread = new WrongWayStopThread();

    System.out.println("Staring thread...");

    thread.start();


    try {

    Thread.sleep(3000);

    } catch (InterruptedException e) {

    e.printStackTrace();

    }

    System.out.println("Interrupting thread...");

    thread.interrupt();

    try {

    Thread.sleep(3000);

    } catch (InterruptedException e) {

    e.printStackTrace();

    }

    thread.keepRunning=false;


    System.out.println("Stopping application...");

    }


    public volatile boolean keepRunning = true;


    public void run() {


    while (keepRunning) {

    System.out.println("Thread is running...");

    long time = System.currentTimeMillis();

    while (System.currentTimeMillis() - time < 1000) {


    }


    }

    }

    }


  • MrZhen
    2018-07-18 14:31:01

    还有就是用try{}catch{}把while循环包起来

深入浅出Java多线程

带你一起深入浅出多线程,掌握基础,展望进阶路线

186088 学习 · 464 问题

查看课程

相似问题