Java 谁在抛出InterruptedException?
在下面的代码中,谁在抛出在第K+1行捕获的InterruptedExceptionJava 谁在抛出InterruptedException?,java,multithreading,interrupt,Java,Multithreading,Interrupt,在下面的代码中,谁在抛出在第K+1行捕获的InterruptedException public class Den implements Runnable { Object T = new Object(); public void m1() { System.out.println("here .. "); synchronized(T){ try { T.wait(); /
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
但是,在线程t1上调用了-interrupt,并且t1正在执行Runnable H作为其thread.target对象。
为什么T会收到那个中断?Thread.target上的中断是否依次调用它正在等待的对象的中断?Thread.interrupt正在调用本机线程。interrupt0-无法看到这些线程
蒂亚 t1.0中断;显然是中断的开始。您可能不知道,但这只是安排了一个中断;目标线程t1不一定立即受到干扰。。。InterruptedException只发生在定义良好的点上,这样您就可以在代码中处理它
wait是w/sleep和一些I/O操作中定义良好的点之一
在您的情况下,系统在等待调用中注入异常。不要在报告的行号中添加太多内容。您使用什么机制来确定哪个线程遇到异常?显然,wait方法正在抛出异常。你的意思是‘谁在中断线程’?通过从不同线程中断引起中断和抛出InterruptedException是两件完全不同的事情。当线程t1进入等待状态时,它会侦听一个中断,当它听到一个中断时,就会抛出InterruptedException。