Java Junit是否关闭了所有线程?
我有一个Junit类,其中包含6个测试。当第一个测试运行时,它调用另一个类中的一个方法,该类启动一个新线程()。让我们称之为MyThread 这个想法是为了在JUnit测试完成后让MyThread保持运行更长的时间 例如,对于要完成的所有JUnit测试,需要1秒,因此我将Java Junit是否关闭了所有线程?,java,multithreading,junit,Java,Multithreading,Junit,我有一个Junit类,其中包含6个测试。当第一个测试运行时,它调用另一个类中的一个方法,该类启动一个新线程()。让我们称之为MyThread 这个想法是为了在JUnit测试完成后让MyThread保持运行更长的时间 例如,对于要完成的所有JUnit测试,需要1秒,因此我将MyThread设置为运行3秒: new Thread(new Runable(){ public void run(){ System.out.println("start"); Thr
MyThread
设置为运行3秒:
new Thread(new Runable(){
public void run(){
System.out.println("start");
Thread.sleep(3000);
System.out.println("end");
}
}).start();
标准输出上将显示开始
,但从未显示结束
在我看来,每当JUnit测试完成时,MyThread
也会关闭
所以我想知道,JUnit是否关闭了它启动的所有线程?非常感谢。这实际上不是JUnit,而是运行JUnit测试的外部系统(如Eclipse或Maven),它们负责终止JVM。这些调用System.exit停止所有线程。如果JUnit这样做了,那么外部系统将没有机会处理结果。为了解决中给出的附加上下文,我建议这正是
@BeforeClass
和@AfterClass
方法的用途
在
@BeforeClass
中创建(静态)DB连接,并在@AfterClass
方法中关闭它。无需让后台方法等待其他测试完成。OK,Context:my 6的所有测试都连接到HSQLDB进程内数据库以完成某些工作。因为我不想每次测试运行时都关闭连接,所以我让他们共享一个连接。我启动了一个线程来监视测试,当所有测试都完成时,它会关闭连接,然后关闭所有测试。但每次JUnit测试结束时,该线程都会终止