在初始化一个新线程的时候,方法执行run()
完之后,怎么杀掉这个线程呢?
public void iniciarHilo(){
new Thread(new Runnable() {
public void run() {
//Codigo
}
}).start();
//Una vez ejecutado el código del método run, necesito eliminar el hilo, o detenerlo
}
像这样
public void iniciarHilo(){
Thread hilo = new Thread(new Runnable() {
public void run() {
//Código
}
});
hilo.start();
//Eliminar este hilo
}
发生的情况是,每次完成特定的决定时,我都会调用一个方法,在其中启动一个新线程,以消除框架的组件,每个组件之间有一个小的延迟,看起来不错,但我越陷进去决定,程序卡住了。
我认为这是因为线程正在运行,因为通过删除方法线程并只留下流程代码,程序运行得很好。
您不能命令线程的执行终止。您唯一能做的就是确保方法的执行
run
(从 实现Runnable
或扩展Thread
)有一些方法可以完成。在此方法执行结束时,线程将完成其执行。这是,而不是像至少有类似的东西(这实际上太基础了,不适合现实世界的应用程序,但它说明了一种停止和终止线程执行的方法):
由于您提到了使用框架,我通知您不建议
Thread
直接创建 s 并从那里修改框架,因为 Swing 使用不同的线程来管理可视组件。最好使用SwingWorker
,但为了获得更好的细节,我们需要更多地了解您的具体情况。忘记使用
Thread#stop
and方法Thread#suspend
。官方文档明确说明您不应该使用这些方法(检查提供的链接的内容)。甚至还有一篇文章专门讨论这个问题:Why areThread.stop
和Deprecated?Thread.suspend
Thread.resume
翻译过来的意思是为什么不推荐使用Thread.stop
,Thread.suspend
和方法Thread.resume
?.stop()
此方法导致线程立即停止。这通常是停止线程的一种突然方式,尤其是在当前线程上执行此方法时。在这种情况下,在 stop() 方法调用之后的那一行永远不会被执行,因为线程上下文在 stop() 返回控制之前终止。一个更优雅的停止线程的方法是使用一些变量,使 run() 方法以有序的方式退出。实际上,您永远不应该使用这种方法。
suspend()
suspend() 方法与 stop() 不同。suspend() 获取线程并使其停止执行,而不会破坏底层系统线程,也不会破坏先前运行线程的状态。如果线程的执行被挂起,可以在同一线程上调用 resume() 以使其再次运行。
http://dhw.umh.es/alex-bia/teaching/PC/material/hilos_tutorial-java/cap10-2.htm
你可以这样做:
当你想启动或停止线程时,使用上面的方法,不要使用thread.start(); 或 thread.stop();。您还可以使用布尔值覆盖 thread.isAlive();
澄清: 您将布尔值作为“易失性”开始,以便在读取或写入时,它的值不能被修改。是为了避免错误。以及启动和停止线程的方法,您将它们作为“同步”启动,这样它们就不能同时执行,因为这会导致错误。
我把 3 留给你,我想每个人的用途很明显,虽然停止线程并删除它不是一个好习惯,但它应该自然结束。
干杯