启动/停止线程Java

问题描述 投票:1回答:1

当我点击按钮时,我想开始/停止一个线程。

这是我试图做的。

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()不会阻止线程。

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

编辑

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

我会更好地解释一下:

我推出了一种名为thread.interrupt()的反射方法,而不是thread.join()interrupt

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

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

java multithreading selenium
1个回答
0
投票

您可能想要了解joininterrupt所做的事情。

join只是等待线程完成,interrupt只是将中断信号发送到线程,这通常什么都不做,它只会在线程等待某个IO或类似的情况下工作。中断信号通常用于关闭一个线程,但完全由线程来检查它并在收到它时正确关闭。你的问题没有详细说明你的第二个帖子中发生了什么,以确定这是否有效。

如果由于某种原因你不能改变在线程中运行的代码使它听interrupt你可以使用Thread.stop代替。然而,它被弃用,因为使用它可能很危险,因为它容易导致死锁。 Thread的Javadoc链接到了有关该主题的几个优秀资源。

另请注意,start线程不止一次是非法的,这似乎是你想要做的。您将需要重新创建它。 (比如再次调用new Threadstart。)

© www.soinside.com 2019 - 2024. All rights reserved.