2011-09-10 8 views
6

En el método principal, un subproceso secundario se inicia utilizando el mecanismo de servicio de ejecutor java 1.5. ¿Cómo puedo hacer que el hilo principal espere hasta que se complete el hilo hijo?¿Cómo unirse a un hilo que se inició con el servicio de ejecutor?

public class MainClass { 

    public static void main(String[] args) { 
     ExecutorService executorService=null; 
     try { 
      executorService=Executors.newFixedThreadPool(1); 
      executorService.execute(new TestThread()); 
      System.out.println("Main program exited..."); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } finally { 
      executorService.shutdown(); 
     } 
    } 
} 

public class TestThread extends Thread { 

    public TestThread() { 
    } 

    public void run() { 
     try { 
      for (int i=0;i<10;i++) { 
       System.out.println(i); 
       TimeUnit.SECONDS.sleep(5); 
      } 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
    } 
} 
+0

Por favor, no utilizar C guión de estilo en Java - sólo hace que el código YA –

Respuesta

9

Como regla general, no debe extender el subproceso directamente ya que esto solo genera confusión, como lo ha hecho aquí.

Su TestThread nunca se inicia, por lo que no puede unirse a él. Todo lo que hace es actuar como Runnable (que es lo que deberías usar en su lugar).

Si desea esperar a que se complete la tarea.

Future future = executorService.submit(new TestRunnable()); 

// wait for the task to complete. 
future.get(); 

Por cierto: Después de Java 1.4.2 vino de Java 5.0, seguido de Java 6 y Java 7.

+0

... entonces Java 8. :) – Campa

+1

PD Tenga en cuenta también la interfaz [Callable] (http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Callable.html) si le interesa un valor devuelto por una tarea. – Campa

+0

@Campa y Java 9 EA. El final de las actualizaciones públicas de Java 8 es marzo de 2017. –

Cuestiones relacionadas