java.util.concurrent:从Runnable到Executor接口的转换

时间:2013-11-18 15:37:38

标签: java concurrency runnable executorservice java.util.concurrent

我正在为DSL编写JUnit测试用例,我需要确保测试中的方法永远不会结束(如this question中所示)。

provided solution很好,但我想使用“new”Executor interface(Java 5.0以后):

@Test
public void methodDoesNotReturnFor5Seconds() throws Exception {
  Thread t = new Thread(new Runnable() {
    public void run() {
      methodUnderTest();
    }
  });
  t.start();
  t.join(5000);
  assertTrue(t.isAlive());
  // possibly do something to shut down methodUnderTest
}

如何将上述代码从“旧”Thread / Runnable界面翻译为“新”ExecutorService / Executor界面?

1 个答案:

答案 0 :(得分:1)

Future<?> future = Executors.newSingleThreadExecutor().submit(new Runnable() {
    public void run() {
        methodUnderTest();
    } 
});
try {
    future.get(5, TimeUnit.SECONDS);
    fail("The task has completed before 5 seconds");
}
catch (TimeoutException e) {
    // expected
}