忽略从另一个线程抛出的InterruptedException

时间:2016-12-06 20:29:46

标签: java multithreading

我有一个班级

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块。

有时会抛出异常,但在这种特殊情况下,我并不关心它。

2 个答案:

答案 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
      }
    };
  }

}