我有一个班级
class Foo {
static void bar() throws InterruptedException {
// do something
Thread.sleep(1000);
}
static void baz(int a, int b, int c) throws InterruptedException {
// do something
Thread.sleep(1000);
}
}
然后我只是在我的主要
中运行它class Main {
public static void main() {
new Thread(Foo::bar).start();
new Thread(() -> Foo.baz(1, 2, 3)).start();
new Thread(() -> Foo.baz(1, 2, 3)).start();
}
}
我不关心InterruptedException
。我试着写一个try-catch块,但很明显,没有抓住异常。 Java不允许我使main()抛出。
我怎样才能完全忽略这个我根本不关心的例外情况?我不想在每个线程构造函数中编写try-catch块。
有时会抛出异常,但在这种特殊情况下,我并不关心它。
答案 0 :(得分:1)
只是捕获方法中的异常并忽略它。你永远不会打断线程,所以这没关系。
static void bar() {
try {
// do something
Thread.sleep(1000);
} catch (InterruptedException ignored) { }
}
答案 1 :(得分:1)
在此解决方案中,我定义了一个接口Interruptible
,以及一个将ignoreInterruption
转换为Interruptible
的方法Runnable
:
public class Foo {
public static void main(String... args) {
new Thread(ignoreInterruption(Foo::bar)).start();
new Thread(ignoreInterruption(() -> Foo.baz(1, 2, 3))).start();
}
static void bar() throws InterruptedException {
// do something
Thread.sleep(1000);
}
static void baz(int a, int b, int c) throws InterruptedException {
// do something
Thread.sleep(1000);
}
interface Interruptible {
public void run() throws InterruptedException;
}
static Runnable ignoreInterruption(Interruptible interruptible) {
return () -> {
try {
interruptible.run();
}
catch(InterruptedException ie) {
// ignored
}
};
}
}