如何在 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()){
   
}

在每次函数调用之后或在我的失败函数内部。但即使我把它放在我的失败函数中,这也只是设置了标志。我怎样才能真正阻止它?

您可以从内部终止线程,这意味着抛出一个您永远不会捕获的 ExceptionError,它只会向上传播到调用堆栈:

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 的异常将不会一路向上传播。