ゲームループを実行するスレッドがあります。新しいゲームを開始するたびに、このゲーム ループを実行できるようにしたいと考えています。しかし、Java のスレッドは 1 回しか開始できないため、どうすればよいのでしょうか?
4 に答える
Thread
同じRunnable
インスタンスの周りに新しいものを作成し、それを開始します。
1.あなたがそう言うとき"you need to run a thread"
、私はあなたが別のスレッドでサブタスクを開始したいということです.
2.この特定のサブタスクを意味する場合は、実行することをお勧めします new thread
。
3. おっしゃる通りBut since the threads in Java can only be started once
これは、 athread (thread of execution)
がそのメソッドを完了する run()
と、それに関連付けられた Thread オブジェクトがそのスレッド性を永久に失うことを意味します....
ただし、このスレッドがプールからのものである場合、プール自体が Thread オブジェクトとその再利用された . パッケージExecutors
から使ってみてください。java.util.concurrent
ゲーム ループを実行するスレッドを実行し続ける必要があるため、次のようにコーディングする必要があります。
public class GameLoop implements Runnable {
...
public void run() {
while (gameNotFinished) {
// do stuff
}
}
}
run()
それが機能しない場合は、キャッチ/ロギングしていない例外が原因でメソッドが停止している可能性があり、したがって気付かない可能性があります。
1) 短い答えは、まさに SLaks がすでに言ったことです: 「...同じ実行可能なインスタンスの周りに新しいスレッドを作成し、それを開始するだけです。」
2) "start" の日常的な意味と、Java スレッド メソッド "start()" のセマンティクスの違いについて混乱していると思います。このチュートリアルは役立つかもしれません:
3)同じスレッドを再利用したい場合は、メソッド「wait()」と「resume()」を使用できます。