gpt4 book ai didi

java - java - 如何在java中以快速干净的方式中止线程?

转载 作者:IT老高 更新时间:2023-10-28 21:12:43 25 4
gpt4 key购买 nike

这是我的问题:我有一个对话框,其中包含一些用户可以更改的参数(例如通过微调器)。每次更改其中一个参数时,我都会启动一个线程以根据新参数值更新 3D View 。如果用户在第一个线程工作时更改另一个值(或通过多次单击微调箭头再次更改相同的值),我想中止第一个线程(以及 3D View 的更新)并启动一个新线程使用最新的参数值。

我该怎么做?

PS:我的线程的 run() 方法中没有循环,因此检查标志不是一种选择:更新 3D View 的线程基本上只调用一个方法,即执行时间很长。我无法在此方法中添加任何要求中止的标志,因为我无权访问其代码。

最佳答案

按照某些人的说法尝试 interrupt() ,看看它是否对您的线程有任何影响。如果没有,请尝试销毁或关闭将使线程停止的资源。这有可能比尝试抛出 Thread.stop() 好一点。

如果性能可以接受,您可以将每个 3D 更新视为一个离散的不可中断事件,然后让它运行到结论,然后检查是否有新的最新更新要执行。这可能会使 GUI 对用户来说有点不稳定,因为他们可以进行五次更改,然后查看五次更改前的图形结果,然后查看最新更改的结果。但是根据这个过程的时间长短,它可能是可以容忍的,并且可以避免不得不杀死线程。设计可能如下所示:

boolean stopFlag = false;
Object[] latestArgs = null;

public void run() {
while (!stopFlag) {
if (latestArgs != null) {
Object[] args = latestArgs;
latestArgs = null;
perform3dUpdate(args);
} else {
Thread.sleep(500);
}
}
}

public void endThread() {
stopFlag = true;
}

public void updateSettings(Object[] args) {
latestArgs = args;
}

关于java - java - 如何在java中以快速干净的方式中止线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/94011/

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