4

好的....让我尽力解释一下....另外:这是我的世界中的一个mod。好的,所以我创建了一个线程对象

public static Thread KillThread = new Thread();

然后在我的主类的构造函数中,当游戏(我的工艺开始)我有

KillThread = new Thread(new KillAuraThread());

KillAuraThread 是线程类的名称。所以我现在创建了一个线程。是它让我生气的地方线程将运行恰好 1 秒,并且它不能运行多次,否则会破坏延迟和线程的点。

if(KillAura.enabled && !KillThread.isAlive())
    {
        System.out.println("Go AURA!");
        try
        {
            KillThread.start();
        }catch (Exception e)
        {
            e.printStackTrace();
        }
    }

这被称为游戏中的每个滴答声,它将发送位置更新等。

现在这是我遇到问题的地方。一旦线程开始,它就变成“活动的”,当它结束时,它不再是“活动的”。但是线程只能启动一次吗?因为第一次运行后它不再工作?和想法?链接?

4

2 回答 2

7

是的,线程只能启动一次,不能重用线程对象。

多次启动一个线程是不合法的。特别是,线程一旦完成执行就可能不会重新启动。看java.lang.Thread.start()

不管这个事实如何,不要使用Thread.Statefor 线程生命周期管理。

于 2012-09-07T00:53:27.017 回答
5

没错,线程只能运行一次,并且多次启动/运行线程是非法的。您应该考虑使用while循环来保持线程处于活动状态。

而不是直接处理线程,您应该使用java.util.concurrent包内的类来定期安排固定任务,这显然是您想要做的。看看ThreadPoolExecutor

于 2012-09-07T00:55:15.920 回答