4

わかりました....これをできる限り説明させてください....また:これはマインクラフト内のモッド用です。さて、スレッドオブジェクトを作成しました

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

これは、位置の更新などを送信するゲーム内のすべてのティックと呼ばれます。

ここで私は問題を抱えています。スレッドが開始すると「生きている」状態になり、終了すると「生きている」状態ではなくなります。しかし、スレッドは 1 回しか開始できませんか? 最初の実行後、機能しなくなったからですか?そしてアイデア?リンク?

4

2 に答える 2

7

はい、スレッドは一度しか開始できません。スレッド オブジェクトを再利用することはできません。

スレッドを複数回開始することは決して合法ではありません。特に、実行が完了すると、スレッドは再開されない場合があります。見るjava.lang.Thread.start()

この事実に関係なく、Thread.Stateスレッドのライフサイクル管理に を使用しないでください。

于 2012-09-07T00:53:27.017 に答える
5

そうです、スレッドは1回しか実行できず、スレッドを2回以上開始/実行することは違法です。whileスレッドを存続させるためにループの使用を検討する必要があります。

スレッドを直接処理する代わりに、java.util.concurrentパッケージ内のクラスを使用して、固定タスクを定期的にスケジュールする必要があります。これは明らかにあなたがやろうとしていることです。を見てくださいThreadPoolExecutor

于 2012-09-07T00:55:15.920 に答える