天天看點

閉鎖CountDownLatch與栅欄CyclicBarrier

閉鎖:一個同步輔助類,在完成一組正在其他線程中執行的操作之前,它允許一個或多個線程一直等待。即,一組線程等待某一事件發生,事件沒有發生前,所有線程将阻塞等待;而事件發生後,所有線程将開始執行;閉鎖最初處于封閉狀态,當事件發生後閉鎖将被打開,一旦打開,閉鎖将永遠處于打開狀态。

閉鎖CountDownLatch唯一的構造方法CountDownLatch(int count),當在閉鎖上調用countDown()方法時,閉鎖的計數器将減1,當閉鎖計數器為0時,閉鎖将打開,所有線程将通過閉鎖開始執行。

栅欄:一個同步輔助類,它允許一組線程互相等待,直到到達某個公共屏障點。利用栅欄,可以使線程互相等待,直到所有線程都到達某一點,然後栅欄将打開,所有線程将通過栅欄繼續執行。CyclicBarrier支援一個可選的 Runnable 參數,當線程通過栅欄時,runnable對象将被調用。構造函數CyclicBarrier(int parties, Runnable barrierAction),當線程在CyclicBarrier對象上調用await()方法時,栅欄的計數器将增加1,當計數器為parties時,栅欄将打開。

差別:閉鎖用于所有線程等待一個外部事件的發生;栅欄則是所有線程互相等待,直到所有線程都到達某一點時才打開栅欄,然後線程可以繼續執行。

轉載自:http://blog.csdn.net/lmc_wy/article/details/7866863

繼續閱讀