Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在我的例子中,为什么我需要尝试用投掷来接球?_Java_Multithreading - Fatal编程技术网

Java 在我的例子中,为什么我需要尝试用投掷来接球?

Java 在我的例子中,为什么我需要尝试用投掷来接球?,java,multithreading,Java,Multithreading,如果方法被声明为抛出相同的异常,请有人帮助我理解为什么需要使用内部try-catch public static void main(String[] args) throws InterruptedException { Thread t1 = new Thread(new Runnable() { public void run() { // TODO Auto-generated method stub

如果方法被声明为抛出相同的异常,请有人帮助我理解为什么需要使用内部try-catch

    public static void main(String[] args) throws InterruptedException {
        Thread t1 = new Thread(new Runnable() {

            public void run() {
                // TODO Auto-generated method stub
                try {
                    producer();
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        });
        t1.start();
        t1.join();
    }
生产者的语法是


私有静态void producer抛出InterruptedException

答案是您正在定义一个匿名类

Thread t1 = new Thread(new Runnable() {

        public void run() {            
            try {
                producer(); //This is called in run method!
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    });

调用producer的方法的声明为public void run,此方法不会引发选中的异常。因此,您必须抓住它。

答案是您正在定义一个匿名类

Thread t1 = new Thread(new Runnable() {

        public void run() {            
            try {
                producer(); //This is called in run method!
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    });

调用producer的方法的声明为public void run,此方法不会引发选中的异常。因此,您必须捕获它。

这是合乎逻辑的,因为您启动了新线程,如果它不是main方法,并且没有使用thread.join,那么在执行离开创建方法之后,新线程就可以生存。因此,您应该独立处理异常。

这是合乎逻辑的,因为您启动了新线程,如果它不是main方法并且未使用thread.join,则在执行离开创建方法后,新线程可以继续运行。所以您应该独立处理异常。

run不抛出InterruptedExceptionrun不抛出InterruptedExceptions,因为它是由于内部类而发生的。非常感谢你。这是由于内部阶级的原因。非常感谢你。