gpt4 book ai didi

java - 如何中断从方法内创建的线程?

转载 作者:行者123 更新时间:2023-12-01 11:13:44 25 4
gpt4 key购买 nike

我知道您可以中断从可运行类创建的线程,但是如何中断从方法创建的线程?使用 volatile boolean 值对我来说不起作用,所以我认为要么有更好的方法来做到这一点,要么我需要以某种方式中断它。我不想中断所有线程,只想中断这个线程。

我创建了一个启动线程的方法,如下所示:

public static void StartSyncThread() {
new Thread() {
public void run() {
isRunning = true; // Set to true so while loop will start

while (isRunning) {
...
}

} // Close run()
}.start();

}

...

public static void KillSyncThread() {
isRunning = false;
}

最佳答案

如果您保留对线程的引用:

private static Thread myThread;

public static void StartSyncThread() {
myThread = new Thread() {
public void run() {
while (!Thread.currentThread().isInterrupted()) {
...
}

} // Close run()
}
myThread.start();
}

然后你就可以调用

public static void killSyncThread() {
if (myThread != null && myThread.isAlive()) {
myThread.interrupt();
}
}

取消它。这样你就可以摆脱静态的 isRunning 标志,interrupt() 设置一个与此等效的内置标志,而且它会将线程从 sleep 或等待中唤醒。

如果您确实将变量声明为 volatile 的,那么它的更新值应该在线程中可见。这可能是一个范围问题,您正在测试的标志与您设置的标志不同?对于全局可变状态,它似乎可能会很快变得复杂。做一个小例子并亲自验证设置标志​​或中断线程是否有效,然后带着这样的信心您可以寻找真正的问题。

关于java - 如何中断从方法内创建的线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32084005/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com