Java TestNG优雅地终止线程。知道为什么吗?

Java TestNG优雅地终止线程。知道为什么吗?,java,testng,Java,Testng,我正在使用TestNG版本7.1.0,这是我的示例代码: @测试 公共void testThreads(){ 新线程(()->{ System.out.println(“已打印”); 试一试{ 睡眠(100); }捕获(例外e){ e、 printStackTrace(); } System.out.println(“未打印”); }).start(); } 这里的输出是这是打印的,而第二行被忽略。没有抛出异常。但是,如果我这样做: publicstaticvoidmain(字符串[]args

我正在使用TestNG版本
7.1.0
,这是我的示例代码:

@测试
公共void testThreads(){
新线程(()->{
System.out.println(“已打印”);
试一试{
睡眠(100);
}捕获(例外e){
e、 printStackTrace();
}
System.out.println(“未打印”);
}).start();
}
这里的输出是
这是打印的
,而第二行被忽略。没有抛出异常。但是,如果我这样做:

publicstaticvoidmain(字符串[]args){
新线程(()->{
System.out.println(“已打印”);
试一试{
睡眠(100);
}捕获(例外e){
e、 printStackTrace();
}
System.out.println(“未打印”);
}).start();
}

两行都按预期打印。您能解释为什么会观察到这种奇怪的行为吗?

TestNG使用对
系统的调用。退出
以执行您的测试用例。这将终止已启动的线程。如果在测试方法结束时添加了明显长于100毫秒的等待,则在启动显式线程后,您将看到第二条打印语句。

谢谢!事实上,这就是原因。另一种方法是在已启动的线程上使用
join()