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

如下内容,为什么可以先interrupt,后sleep ?

如下内容,为什么可以先interrupt,后sleep ?

哔哔one 2022-05-17 15:15:32
public static void main(String s[]) { sop("Start"); Thread t=Thread.currentThread(); try { t.interrupt(); Thread.sleep(3000); } catch (InterruptedException e) { sop("Be interrupted~!!"); } sop("OVER"); } public static void sop(Object obj){ System.out.println(obj); }结果是所有语句按顺序打印,没有停滞~!问题如标题~复制过来,代码变样了,看图片吧~
查看完整描述

3 回答

?
森栏

TA贡献1810条经验 获得超5个赞

因为interrupt在 java 内部实际上是设定了一个标志位叫 interrupt status ,可以中断任何阻塞状态,包括 sleep 在内,但是 interrupt 本身不会做什么主动的动作去恢复一个阻塞状态的线程,所以事情是这样的
在 interrupt 那行标记了重担标志
在 sleep 那行要阻塞的时候看到这个标志位后自己抛出了InterruptedException
不信你可以把 interrupt 那行从 try and catch 段中移到前面,你会发现不会抛任何异常直接走过去,然后到 sleep 才抛异常
理解了原理,就好想了

查看完整回答
反对 回复 2022-05-23
?
侃侃无极

TA贡献2051条经验 获得超10个赞

public static void main(String s[]) {
sop("Start");
Thread t=Thread.currentThread();
try {
Thread.sleep(3000);
t.interrupt();
} catch (InterruptedException e) {
sop("Be interrupted~!!");
}
sop("OVER");
}
public static void sop(Object obj){ System.out.println(obj); }

这样应该才会停一会



查看完整回答
反对 回复 2022-05-23
?
动漫人物

TA贡献1815条经验 获得超10个赞

即使先interrupt,也不可能中断,只有在sleep时,才能中断。

查看完整回答
反对 回复 2022-05-23
  • 3 回答
  • 0 关注
  • 187 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信