为什么我的示例中需要带有抛出的try-catch?

时间:2014-03-16 15:59:25

标签: 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 {
                    producer();
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        });
        t1.start();
        t1.join();
    }

producer()的语法是

private static void producer() throws InterruptedException

2 个答案:

答案 0 :(得分:4)

答案是你要定义一个匿名类。

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(),并且此方法不会抛出已检查的异常。因此,你必须抓住它。

答案 1 :(得分:0)

这是合乎逻辑的,因为你启动了新的线程,它可以在执行后离开创建方法(如果它不是main方法,如果你没有使用Thread.join())。所以你应该独立处理异常。