java - 如何销毁一个线程?

标签 java multithreading

我正在制作简单的游戏,这是代码:

public class Game extends Canvas implements Runnable {


public void start() {
    t = new Thread(this);
    t.start();
}

@Override
public void run() {
    setVisible(true); // visibility of the thread turn on

    while (!t.isInterrupted()) {
        if(condition for end the game) {
            t.interrupt(); //here i need to destroy the thread
            setVisible(false); //visibility to off
        }
        update();
        render();
        try {
            Thread.sleep(20);
        } catch(InterruptedException e) {}
    }
}

}

我有另一个扩展 JFrame 的类,该类正在引入主菜单,如果我的“结束游戏的条件”为真,则线程消失并且菜单再次可见,这很好,但如果我想开始新的再次游戏,线程的行为很奇怪 - 似乎 Thread.sleep() 方法从 20 更改为 10,因为它的速度更快,可能我需要杀死线程,但我不知道如何,谢谢

最佳答案

简单,打破循环:

    if(condition for end the game) {
        t.interrupt(); //here i need to destroy the thread
        setVisible(false); //visibility to off
        break;
    }

结束循环,线程就会结束。

关于java - 如何销毁一个线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20272075/

相关文章:

用于带代理支持的多线程蜘蛛的 Python 包?

C++11 原子。可见性和 thread.join()/停止线程的正确方法

.net - 在 .NET 中使线程向另一个线程发出信号的最佳方法是什么?

java - 如何从字符串中提取未知名称

java - 仅当负前瞻和负后瞻都满足时才拆分字符串

multithreading - 我怎样才能在MATLAB中 'tell'每个CPU核心做什么?

java - 使用 boolean var 停止线程

java - 当数据存储和数据格式在未来版本中可能发生变化时,存储应用程序数据的最佳方式?

java - 错误: class "javax.persistence.PersistenceUtil"'s signer information does not match

java - tomcat session 复制-未序列化异常