8

別の投稿から

スレッドを複数回実行する必要がある場合は、スレッドの新しいインスタンスを作成し、それに対して start を呼び出す必要があります。

これはどのように行われますか?

4

3 に答える 3

4

別の抽象化レイヤーを使用します。を使用し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

于 2013-11-10T11:08:38.480 に答える
3

基本的に、スレッドは再開できません。

したがって、再利用可能な「スレッド」が必要な場合は、本当に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 つによって提供されるような、より洗練されたメカニズムを使用して「ランナブル」を実行する方がはるかに優れています。このメカニズムは、実際のスレッドが終了しないように管理します。 )

于 2013-11-10T11:37:56.890 に答える
2

JavaThreadを 2 回実行することはできません。開始されて作業が終了すると、再度開始することはできません (メソッドの呼び出しstartは失敗します)。Threadそのため、 (同じ を使用して)の新しいインスタンスを作成してRunnable開始する必要があります。

于 2013-11-10T11:06:49.133 に答える