提问 关于 while(!this.isInterrupted()){}

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

不是咸鱼

2017-03-29 23:56

老师的案例中:

第一次设置whlie(true),线程没有结束,那么main()方法中thread.interrupt()中断的是哪个线程?

第二次改为while(!this.isInterrupted()){},其他没变,那么按照上一次的说法thread.interrupt()并没有中断线程,因此isInterrupted()获取的值应为false,!false就是true,那么while循环应该也不会停止,所以请问this.isInterrupted()中的当前线程是哪个线程?

谢谢各位!

写回答 关注

3回答

  • kuhaku_
    2018-12-24 12:09:06

    thread调用了interrupt()方法, 并不是如字面意义上就会将线程终止, 而是将线程的终止状态设置为true, 使isInterrupted()方法返回ture, 而这个时候while循环里的判断条件又没有提到isInterrupted()方法, 所以即使thread调用了interrupt()方法, 对这个循环也没有任何影响啊, 所以线程还是会一直执行下去

  • N_E_O
    2017-04-12 00:16:52

    interrupt()这个方法并不是停止线程的方法,所以thread这个线程因为while(true)是不会终止的

  • N_E_O
    2017-03-30 13:53:30

    thread.interrupt()中断的是WorngWayStopThread 的对象thread这个线程;

    while(!this.isInterrupt())  其他没变,因为thread调用了interrupt()方法,所以this.isInterrupt()会返回true,!true就是FALSE,所以while循环会停止,这个this.isInterrupt()还是thread这个线程

    蔚然成麟er

    我想不明白,while(true)中,main这个线程结束之前,thread这个线程执行了interrupt(),说明已经中止了啊,但是在main这个线程结束之后,为什么还会继续输出Thread is running,是不是因为while(true)是死循环,thread会一直循环?

    2017-04-05 23:20:55

    共 1 条回复 >

深入浅出Java多线程

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

186078 学习 · 464 问题

查看课程

相似问题