【问题标题】:Can a Java Thread be alive more than once?Java 线程可以多次存活吗?
【发布时间】:2012-09-07 00:50:41
【问题描述】:

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

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();
        }
    }

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

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

【问题讨论】:

  • (也许这里有比线程更好的方法?)
  • 不要使用线程。 Minecraft 是资源密集型的,无需添加大量线程来运行一秒钟然后停止。以与其他所有方法相同的方式执行此操作,即给它一个终生计数器,每滴答减一,当它变为零时,杀死光环。
  • KillAuraThread 是一个 Runnable 接口?
  • 另外,在构造函数中启动线程是并发错误的常见原因。

标签: java multithreading


【解决方案1】:

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

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

不管这个事实,不要使用Thread.State 进行线程生命周期管理。

【讨论】:

  • 哇,好的,谢谢,这很有帮助...我必须找到一种新的方法来做到这一点。谢谢 wug,我会尝试在没有线程的情况下做到这一点
【解决方案2】:

你是对的,线程只能运行一次,它是illegal to start/run a thread more than once。您应该考虑使用while 循环来保持线程处于活动状态。

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

【讨论】:

  • +1 表示 while 循环。循环顶部的 Wait() 应该可以工作 - 当你想杀死 Aura 时只需 Notify() 它。
猜你喜欢
  • 2011-07-26
  • 2015-06-16
  • 2010-09-24
  • 2013-03-08
  • 2011-06-19
  • 2012-05-27
  • 2020-04-14
  • 2013-06-22
  • 1970-01-01
相关资源
最近更新 更多