好的....让我尽力解释这个...... 另外:这是针对Minecraft中的mod。 好的,所以我创建了一个线程对象
public static Thread KillThread = new Thread();
然后在我的主要类的构造函数中,当游戏(Mine craft开始)时调用
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();
}
}
这称为游戏中的每个刻度,它会发送位置更新等。
现在这里是我遇到问题的地方。一旦线程启动它就会变为“活着”,当它结束时它就不再“活着”。但是线程只能启动一次吗?因为在第一次运行后它不再工作了?和想法?链接?
答案 0 :(得分:7)
是线程只能启动一次,不能重用Thread对象。
不止一次启动线程永远不合法。特别是,a 一旦完成执行,线程可能无法重新启动。见
java.lang.Thread.start()
无论这个事实如何,都不要将Thread.State
用于线程生命周期管理。
答案 1 :(得分:5)
你是对的,线程只能运行一次而且它是illegal to start/run a thread more than once。您应该考虑使用while
循环来保持线程活跃。
您应该使用java.util.concurrent
包中的类来定期安排固定任务,而不是直接处理线程,这显然是您尝试做的事情。看看ThreadPoolExecutor
。