在下面的代码中,谁将InterruptedException
扔到了线上 - (K + 1)?
public class Den implements Runnable {
Object T = new Object();
public void m1() {
System.out.println("here .. ");
synchronized(T){
try {
T.wait(); // line-K
} catch (InterruptedException ex) { // line-(K+1)
System.out.println("An InterruptedException is thrown ");
ex.printStackTrace();
}
System.out.println("here 2");
}
} // m1()
@Override
public void run() {m1();}
public static void main (String ...jsdf) {
Den H = new Den();
Thread t1 = new Thread(H);
t1.start();
t1.interrupt(); // line-W
}
}
此代码的输出是
run:
here ..
An InterruptedException is thrown
java.lang.InterruptedException
at java.lang.Object.wait(Native Method)
here 2
at java.lang.Object.wait(Object.java:502)
at prj.Dene.m1(Dene.java:12)
at prj.Dene.run(Dene.java:22)
at java.lang.Thread.run(Thread.java:745)
BUILD SUCCESSFUL (total time: 0 seconds)
堆栈跟踪告诉它正在抛出它的T.wait()
方法 - 应该是,在代码中没有其他任何东西抛出InterruptedException
。
然后 - interrupt()
在线程t1
上调用,而t1
正在执行Runnable H
作为其Thread.target
对象。
怎么来T
收到那个中断? interrupt()
上的Thread.target
是否依次调用它所等待的interrupt()
个对象? Thread.interrupt()
正在调用原生Thread.interrupt0()
- 无法看到这些内容。
TIA。
答案 0 :(得分:0)
t1.interrupt();
显然是中断的启动。你可能没有意识到,但这只是#34;时间表"中断;目标线程(t1)不一定会立即受到干扰...... InterruptedException只发生在明确定义的点上,以便您可以在代码中处理它。
wait()
是这些明确定义的点之一(沿着w / sleep()
和一些I / O操作)。
在您的情况下,系统会在wait()
调用中注入异常。不要对报告的行数太多了。