java - 启动/停止线程 Java

标签 java multithreading selenium

我想在单击按钮时启动/停止线程。

这是我尝试做的。

Thread thread;
String c = classMain.classes.get(a);
Class c1 = Class.forName(c);
Method ref = c1.getMethod("ref");

Object rex = c1.newInstance();
thread = new Thread(new Runnable() {
    public void run() {
        try {   
            running = true;
            ref.invoke(rex, null);
        } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
            e.printStackTrace();
        }
    }
});
if (isRunning() == true) {
    System.out.println("Here");
    running = false;
    thread.interrupt();
    thread.join();
} else {
    thread.start();
}

出于某种原因,interrupt()join() 不会停止线程。

我该怎么办?我错过了什么吗?

编辑

好吧,我找到了一个快速但肮脏的解决方案:抛出自定义异常。

我会更好地解释:

我启动了一个名为 interrupt 的反射方法,而不是 thread.interrupt()thread.join()

它启动一个异常,使线程崩溃,从而立即终止。

我不确定这是否有效(我不得不说,我调用的方法是用Selenium做的测试,理论上,这样关闭时不应该浪费资源),所以如果你知道更多,请告诉我。

最佳答案

您可能想了解joininterrupt 的作用。

join 只是等待线程完成,interrupt 只是向线程发送中断信号,通常不执行任何操作,只有当线程正在等待某些 IO 或类似操作时才会起作用。中断信号通常用于关闭线程,但完全由线程来检查它并在收到信号后正确关闭。您的问题没有提供有关第二个线程中发生的情况的足够详细信息,无法判断这是否可行。

如果由于某种原因您无法更改线程中运行的代码以使其监听中断,您可以使用Thread.stop 代替。然而,它已被弃用,因为使用它可能很危险,因为它很容易导致死锁。 Thread 的 Javadoc有关该主题的几个优秀资源的链接。

另请注意,多次启动线程是非法的,这似乎是您想要做的。相反,您需要重新创建它。 (就像调用new Thread并再次start一样。)

关于java - 启动/停止线程 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47859410/

相关文章:

selenium - 在失败场景的范围报告 4 中添加屏幕截图

java - 我如何更改 android.widget.CheckedTextView 的检查值

java - 操作数组和 vector

java - 如何在单击按钮时关闭对话框窗口

java - 导入org.apache.poi.ooxml无法解析

r - R中的多线程数据表比使用单线程的慢得多

c# - .net 中的线程

java - Selenium 图像的大小

java - 合并对象的数组列表并根据字段值删除重复项

java - 为每个创建的线程使用不同的日志文件