JAVA多线程中设置了interrupt之后用isInterrupted检查状态是false

KK_在努力 2018-02-11 05:25:11
public class Run3 {
public static void main(String[] args) {


try {
Thread5 thread5 = new Thread5();
thread5.start();
Thread5.sleep(1000);
thread5.interrupt();
//当前线程是main
System.out.println("当前线程是:"+Thread.currentThread().getName());
//这个为什么是false
System.out.println("是否停止3? ="+thread5.isInterrupted());
//虽然是Thread5.interrupted(),但是interrupted()是当前线程的状态,与谁来调用它没有关系
System.out.println("是否停止1? ="+Thread5.interrupted());
System.out.println("是否停止2? ="+Thread5.interrupted());
} catch (InterruptedException e) {
// TODO 自动生成的 catch 块
System.out.println("main catch");
e.printStackTrace();
}

}

}

class Thread5 extends Thread{

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

}
}

运行之后结果如下图:
i= 49991
i= 49992
i= 49993
i= 49994
i= 49995
i= 49996
i= 49997
i= 49998
i= 49999
i= 50000
当前线程是:main
是否停止3? =false
是否停止1? =false
是否停止2? =false
...全文
608 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
KK_在努力 2018-02-12
  • 打赏
  • 举报
回复
我要结贴了,结合2楼给的博文和自己查资料才理解了。Thread5.sleep(1000);这个休眠的是主线程,因为sleep()方法是让当前运行的线程休眠,这里是main线程。在main线程休眠这1s内,thread5线程可能早就运行完了。所以后面再interrupt设置中断标记就没用了,再检查状态得到的就会一直是false
KK_在努力 2018-02-11
  • 打赏
  • 举报
回复
引用 2 楼 kuangbao9的回复:
https://www.cnblogs.com/w-wfy/p/6414801.html 这个应该可以解答你的问题
我这个interrupt是在sleep后面呀,我让几个同事试了下,都是得到的false,网上同样的代码都是得到的true,我也是看不懂了
kuangbao9 2018-02-11
  • 打赏
  • 举报
回复
https://www.cnblogs.com/w-wfy/p/6414801.html 这个应该可以解答你的问题
KK_在努力 2018-02-11
  • 打赏
  • 举报
回复
按道理来说System.out.println("是否停止3? ="+thread5.isInterrupted());应该是true的吧,想不通为什么得到的一直是false

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧