2011-09-10 15 views
6

Ana yöntemde çocuk iş parçacığı, java 1.5 çalıştırıcı hizmet mekanizması kullanılarak başlatılır. Çocuk iş parçacığı tamamlanana kadar ana iş parçacığının nasıl beklemesini sağlayabilirim?Yönetici hizmeti kullanılarak başlatılan iş parçacığına nasıl katılırım?

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

Java C tarzı girinti lütfen kullanmayın - sadece o ARTIK kod –

cevap

9

Başparmak kuralı olarak, doğrudan iş parçacığını doğrudan genişletmemelisiniz, çünkü bu burada olduğu gibi sadece karışıklığa yol açmaktadır.

TestThread'iniz hiçbir zaman başlatılmaz, böylece onunla katılamazsınız. Tüm yaptığı bir Runnable olarak hareketleri (bunun yerine kullanmanız gereken).

Görevin tamamlanmasını beklemek isterseniz.

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

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

BTW: Java 1.4.2 Java 6 ve Java 7. izledi Java 5.0 geldikten sonra

+0

... Java 8 yapar. :) – Campa

+1

PS Ayrıca tarafından döndürülen bir değerle ilgileniyorsanız [Callable] (http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Callable.html) arayüzüne de dikkat edin. bir görev. – Campa

+0

@Campa ve Java 9 EA. Java 8 Genel Güncelleştirmelerin Sonu Mart 2017'dir. –

İlgili konular