countdownlatch類位於j**a.util.concurrent 包下,利用它可以實現類似計數器的功能。比如有乙個任務 a,它要等待其他 4 個任務執行完畢之後才能執行,此時就可以利用 countdownlatch來實現這種功能了。
public static void main(string args) throws interruptedexception catch (interruptedexception e)};}.start();
}latch.await();
system.out.println("所有學生交完了作業!!");
字面意思回環柵欄,通過它可以實現讓一組執行緒等待至某個狀態之後再全部同時執行。叫做回環是因為當所有等待執行緒都被釋放以後,cyclicbarrier 可以被重用。我們暫且把這個狀態就叫做barrier,當呼叫 await()方法之後,執行緒就處於 barrier 了。
cyclicbarrier 中最重要的方法就是 await 方法,它有 2 個過載版本:
public int await():用來掛起當前執行緒,直至所有執行緒都到達 barrier 狀態再同時執行後續任務;
public int await(long timeout, timeunit unit):讓這些執行緒等待至一定的時間,如果還有執行緒沒有到達 barrier 狀態就直接讓到達 barrier 的執行緒執行後續任務。
注意:countdownlatch 只能使用一次,而 cyclicbarrier 可以使用多次。countdownlatch 是手動指定等待乙個或多個執行緒執行完成再執行,而 cyclicbarrier 是 n 個執行緒相互等待,任何乙個執行緒完成之前,所有的執行緒都必須等待。
我覺得這個的不同點是:還是老師收作業的問題,只不過這次條件變成了:現在開始收作業了!要是有乙個交不了作業大家都不准走!然後那些交的早的也得等!等所有人都交完作業之後,老師回家做其他事,同學放學回家做其他事!
semaphore 翻譯成字面意思為 訊號量,semaphore 可以控制同時訪問的執行緒個數,通過acquire() 獲取乙個許可,如果沒有就等待,而 release() 釋放乙個許可。
semaphore 類中比較重要的幾個方法:
public void acquire(): 用來獲取乙個許可,若無許可能夠獲得,則會一直等待,直到獲得許可。
public void acquire(int permits):獲取 permits 個許可;
public void release() :釋放許可。注意,在釋放許可之前,必須先獲獲得許可。
public void release(int permits) :釋放 permits 個許可;
JUC包下的常用多執行緒輔助類
允許乙個或多個執行緒等待直到在其他執行緒中執行的一組操作完成的同步輔助。countdownlatch用給定的計數初始化。await方法阻塞,直到由於呼叫countdown 方法,當前計數達到零,此後所有等待執行緒被釋放,並且任何後續的呼叫await立即返回。這是乙個一次性的現象 計數無法重置。場景舉...
執行緒池 juc包下
1.使用執行緒池的優點如下 1.降低資源消耗 通過重複利用已建立的執行緒,降低執行緒建立與銷毀帶來的損耗。2.提高響應速度 當新任務到達時,任務不需要等待執行緒建立就可以立即執行。3.提高執行緒的可管理性 使用執行緒池可以統一進行執行緒分配 排程與監控。當乙個runnable或callable物件到...
juc包下的關於併發四大工具類
countdownlatch 閉鎖 使用countdownlatch可以實現類似多執行緒下計數器的功能。構造器 1.引數count為計數器 2.呼叫await 方法時,執行緒被掛起,它會等待直到count值為0才繼續執行 過載 public boolean await long await time...