2012-09-11 56 views
0

我說兩個線程t1和t2,我想同時啓動(同時),每個調用System.out.println()打印到控制檯,然後在同一時間完成。同時啓動和查殺線程

請告知如何通過執行器框架來實現這一點。我正嘗試在執行器框架本身的幫助下做到這一點..!

+2

你能編輯你的文章來解釋_why_你想做這個嗎?這是一個功課問題或什麼? – Gray

+0

你嘗試過什麼嗎?如果是這樣,告訴我們! – Thousand

回答

6

您可以使用2 CountDownLatch es或CyclicBarrier來做到這一點。例如:

final CountDownLatch start = new CountDownLatch(2); 
final CountDownLatch end = new CountDownLatch(2); 

Runnable r1 = new Runnable() { 
    @Override 
    public void run() { 
     try { 
      start.countDown(); 
      start.await(); 
      System.out.println("In 1"); 
      end.countDown(); 
      end.await(); 
     } catch (InterruptedException ex) { 
      Thread.currentThread().interrupt(); //restore interruption status 
     } 
    } 
}; 
Runnable r2 = new Runnable() { 
    @Override 
    public void run() { 
     try { 
      start.countDown(); 
      start.await(); 
      System.out.println("In 2"); 
      end.countDown(); 
      end.await(); 
     } catch (InterruptedException ex) { 
      Thread.currentThread().interrupt(); //restore interruption status 
     } 
    } 
}; 
+0

+1漂亮的傢伙。請考慮總是在示例代碼中使用'InterruptedException'來執行某些操作(不管是退出還是重新中斷),以避免延長catch和forget的思路。 – Gray

+0

@格雷謝謝。絕對是OP需要用'InterruptedException'來做些事情,很可能只是重置中斷狀態並退出。我編輯過這種方式。 – assylias

+0

@assylias Thanx夥計,請告知如何通過執行器框架實現這個相同的事情。 –