为什么我需要处理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

回到顶部