如何在 Java 中停止 currentThread?
How to stop currentThread in Java?
我正在 运行 使用 TestNg 进行并行测试,我想 stop/kill 在我的脚本中的某些点创建一个线程。这个脚本有很多层,所以简单地将异常一直抛回 main() 并不是我的最佳途径。
thread.stop()
对我有用,但它已被弃用,所以我宁愿不使用它并且 thread.interrupt() 对我不起作用,因为如果线程被中断。这是我的意思的一个简短的虚构示例:
driverexec.navigateTo("http://www.google.com");
xpath= "//input[@name='q111']";
driverexec.typeByXpath("type search", xpath, "gorillas");
System.out.println("gojng again");
xpath= "//input[@name='btnK']";
driverexec.clickByXpath("search google", xpath);
现在,每个 driverexec
函数 都可能 失败,我为此设置了一个失败函数。所以基本上每次我的 failure()
函数被调用时,我都想 stop
当前线程。
所有看到的例子是否中断都会导致我不得不放置这条线:
if (thread.interrupted()){
}
在每次函数调用之后或在我的失败函数内部。但即使我把它放在我的失败函数中,这也只是设置了标志。我怎样才能真正阻止它?
您可以从内部终止线程,这意味着抛出一个您永远不会捕获的 Exception
或 Error
,它只会向上传播到调用堆栈:
public void failure() {
// as you're using a test, an assertion error may be a suitable option
throw new AssertionError("Test failure");
}
您也不必担心您的 main
方法会受此影响,因为除了 main
-Thread
之外 Thread
的异常将不会一路向上传播。
我正在 运行 使用 TestNg 进行并行测试,我想 stop/kill 在我的脚本中的某些点创建一个线程。这个脚本有很多层,所以简单地将异常一直抛回 main() 并不是我的最佳途径。
thread.stop()
对我有用,但它已被弃用,所以我宁愿不使用它并且 thread.interrupt() 对我不起作用,因为如果线程被中断。这是我的意思的一个简短的虚构示例:
driverexec.navigateTo("http://www.google.com");
xpath= "//input[@name='q111']";
driverexec.typeByXpath("type search", xpath, "gorillas");
System.out.println("gojng again");
xpath= "//input[@name='btnK']";
driverexec.clickByXpath("search google", xpath);
现在,每个 driverexec
函数 都可能 失败,我为此设置了一个失败函数。所以基本上每次我的 failure()
函数被调用时,我都想 stop
当前线程。
所有看到的例子是否中断都会导致我不得不放置这条线:
if (thread.interrupted()){
}
在每次函数调用之后或在我的失败函数内部。但即使我把它放在我的失败函数中,这也只是设置了标志。我怎样才能真正阻止它?
您可以从内部终止线程,这意味着抛出一个您永远不会捕获的 Exception
或 Error
,它只会向上传播到调用堆栈:
public void failure() {
// as you're using a test, an assertion error may be a suitable option
throw new AssertionError("Test failure");
}
您也不必担心您的 main
方法会受此影响,因为除了 main
-Thread
之外 Thread
的异常将不会一路向上传播。