如果方法被声明为抛出相同的异常,有人可以帮助我理解为什么我需要使用(内部)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
答案 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()
)。所以你应该独立处理异常。