Java - 运行两次线程

时间:2013-11-10 11:02:29

标签: java multithreading

From another post

  

如果一个线程需要多次运行,那么应该做一个   线程的新实例和调用就开始了。

这是怎么做到的?

3 个答案:

答案 0 :(得分: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 s来接收任务。这消除了产生新Thread的开销,因为它会缓存它们。

答案 1 :(得分:2)

java Thread无法运行两次。一旦启动并完成其工作,就无法再次启动(调用方法start将失败)。因此,您必须创建Thread的新实例(使用相同的Runnable)并启动它。

答案 2 :(得分:2)

基本上,无法重新启动线程。

因此,如果您想要一个可重复使用的“线程”,那么您实际上是在谈论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();

(这纯粹仅用于说明目的!使用更复杂的机制运行“runnables”要好得多,例如由ExecutorService类之一提供,这将管理实际的线程以某种方式避免它们终止。)