スレッドを複数回実行する必要がある場合は、スレッドの新しいインスタンスを作成し、それに対して start を呼び出す必要があります。
これはどのように行われますか?
別の抽象化レイヤーを使用します。を使用しExecutorService
ます。
簡単な例を次に示します。
public static void main(String args[]) throws InterruptedException {
final ExecutorService service = Executors.newCachedThreadPool();
final class MyTask implements Runnable {
@Override
public void run() {
System.out.println("Running my task.");
}
};
for (int i = 0; i < 10; ++i) {
service.submit(new MyTask());
}
service.shutdown();
service.awaitTermination(1, TimeUnit.DAYS);
}
タスクを好きなだけ にダンプするservice
だけです。
はスレッド プールです。これには、発生したタスクを処理ExecutorService
する多数の があります。これにより、キャッシュされるため、Thread
新しい を生成するオーバーヘッドがなくなります。Thread
基本的に、スレッドは再開できません。
したがって、再利用可能な「スレッド」が必要な場合は、本当にRunnable
. あなたは次のようなことをするかもしれません:
Runnable myTask = new Runnable() {
public void run() {
// Do some task
}
}
Thread t1 = new Thread(myTask);
t1.start();
t1.join();
Thread t2 = new Thread(myTask);
t2.start();
(これは純粋に説明のみを目的としています!ExecutorService
クラスの 1 つによって提供されるような、より洗練されたメカニズムを使用して「ランナブル」を実行する方がはるかに優れています。このメカニズムは、実際のスレッドが終了しないように管理します。 )
JavaThread
を 2 回実行することはできません。開始されて作業が終了すると、再度開始することはできません (メソッドの呼び出しstart
は失敗します)。Thread
そのため、 (同じ を使用して)の新しいインスタンスを作成してRunnable
開始する必要があります。