遇到问题了。我有一个生成的线程,必须调用它的finally block 。假设下面的代码,是否可以确保调用runnable中的finally?
import org.junit.Test;
public class ThreadTest {
@Test
public void testThreadFinally() throws InterruptedException {
Runnable r = new Runnable() {
@Override
public void run() {
try {
System.out.println("Going to sleep...");
Thread.sleep(1000);
System.out.println("slept 1000 ms");
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
System.out.println("Must print this.");
}
}
};
Thread t = new Thread(r);
t.setDaemon(false);
t.start();
Thread.sleep(500);
System.out.println("main thread about to throw runtime...");
throw new RuntimeException("fail");
}
}
最佳答案
WFM 也是如此。但在命令行中没有使用 jUnit 进行了测试。可能与此有关。当发生意外异常时,jUnit 可能只是关闭运行测试的虚拟机。您是否尝试添加
@Test (expected=RuntimeException.class)
到方法。
或者在这种情况下,jUnit 的行为并不像在 main(..) { }
block 中运行相同的代码
在控制台中运行时的输出
Going to sleep...
main thread about to throw runtime...
Exception in thread "main" java.lang.RuntimeException: fail
at Test.main(Test.java:22)
slept 1000 ms
Must print this.
关于java - 确保当生成器遇到 RuntimeException 时,最终在生成的线程中运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1757379/