为了账号安全,请及时绑定邮箱和手机立即绑定

最后的思考题

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

正在回答

5 回答

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

7 回复 有任何疑惑可以回复我~
#1

我是猫_夏 提问者

非常感谢!
2018-07-18 回复 有任何疑惑可以回复我~
#2

惨的一

想问一下这个是什么原理
2018-09-24 回复 有任何疑惑可以回复我~
#3

霸气小肆毛 回复 惨的一

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

也可以在catch中写一个 break;

1 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~
#1

我爱孙佳怡

刚才试了下,没错,没少打印,自己看错了
2019-05-22 回复 有任何疑惑可以回复我~

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) {


}


}

}

}


2 回复 有任何疑惑可以回复我~

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

1 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

最后的思考题

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信