猿问

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

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); }
结果是所有语句按顺序打印,没有停滞~!
问题如标题~
复制过来,代码变样了,看图片吧~



哔哔one
浏览 188回答 3
3回答

森栏

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

侃侃无极

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); }这样应该才会停一会

动漫人物

即使先interrupt,也不可能中断,只有在sleep时,才能中断。
随时随地看视频慕课网APP
我要回答