是否有一种简单的方法可以调用sleep并传播异常

时间:2012-12-31 15:10:28

标签: java guava

我想致电Thread.sleep,并传播InterruptException,如果它确实被抛出。

虚构语法:

Interruptibles.sleep(1000);

相当于

try {
    Thread.sleep(1000);
} catch (InterruptException e) {
    throw Throwables.propagate(e);
}

在公共库(guava,apache commons等)中是否有类似的功能。

2 个答案:

答案 0 :(得分:9)

在RuntimeException中包装可能会导致痛苦。 这是一个复杂的主题,我推荐Java Concurrency in Practice中的相关部分来完全理解您的选择 Guava有sleepUninterruptibly,它实现了那里描述的标准习语之一。

答案 1 :(得分:3)

你可以这样做。

try {
    Thread.sleep(1000);
} catch (InterruptException e) {
    Thread.currentThread().interrupt();
}

try {
    Thread.sleep(1000);
} catch (InterruptException e) {
    Thread.currentThread().stop(e);
}

但通常最好让异常“冒泡”到可以正确处理的地方。您的IDE可以通过填写您需要的代码来简化这一过程。