为什么我需要处理Thread.sleep()的异常?
要编译此代码,我可以:
- 将我的通话
Thread.sleep()
置于try / catch块中,或 - 已经
printAll()
声明它可以抛出一个InterruptedException
。
为什么我必须这样做?
class Test { public static void main( String[] args ) {
printAll( args );
}
public static void printAll( String[] line ) {
System.out.println( lines[ i ] );
Thread.currentThread().sleep( 1000 ):
}
}
(示例代码来自Kathy
Sierra的SCJP书。)
我知道Thread.sleep()
引发的异常是已检查的异常,因此我必须处理它,但是在什么情况下Thread.sleep()
需要引发此异常?
回答:
如果以一种可以引发检查异常的方式声明方法(Exception
不是的子类RuntimeException
),则调用该方法的代码必须在一个try-
catch块中调用它,否则调用者方法必须声明以引发它。
Thread.sleep()
声明如下:
public static void sleep(long millis) throws InterruptedException;
它可能会抛出InterruptedException
并直接延伸,java.lang.Exception
因此您必须抓住它或声明将其抛出。
为什么要这样Thread.sleep()
声明?因为如果a
Thread
正在睡眠,则该线程可能被Thread.interrupt()
另一个线程中断,在这种情况下,睡眠线程(该sleep()
方法)将抛出this的一个实例InterruptedException
。
Thread t = new Thread() { @Override
public void run() {
try {
System.out.println("Sleeping...");
Thread.sleep(10000);
System.out.println("Done sleeping, no interrupt.");
} catch (InterruptedException e) {
System.out.println("I was interrupted!");
e.printStackTrace();
}
}
};
t.start(); // Start another thread: t
t.interrupt(); // Main thread interrupts t, so the Thread.sleep() call
// inside t's run() method will throw an InterruptedException!
Sleeping...I was interrupted!
java.lang.InterruptedException: sleep interrupted
at java.lang.Thread.sleep(Native Method)
at Main$1.run(Main.java:13)
以上是 为什么我需要处理Thread.sleep()的异常? 的全部内容, 来源链接: utcz.com/qa/421261.html