Java 谁在抛出InterruptedException?

Java 谁在抛出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(); /

在下面的代码中,谁在抛出在第K+1行捕获的InterruptedException

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。