尝试中断(),正如有些人所说,看看它是否对你的线程有任何影响。如果没有,请尝试销毁或关闭将使线程停止的资源。这有可能比试图向它投掷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;
}