java併發- 併發工具類
thread.join原理
假設A執行緒中執行threadB.join(),基本等價於以下程式碼段
//threadB.join()等價於以下程式碼段 synchronized(threadB){ while(threadB is alive) threadB.wait(); }
當threadB銷燬時,虛擬機器會執行threadB.notifyAll(),然後執行緒A就可以繼續執行了。
CountDownLatch
等待多執行緒執行完成
CountDownLatch c = new CountDownLatch(2); c.countDown(); c.await();//這個會阻塞,直到執行了n次(建構函式中的數值) c.countDown();
同步屏障CyclicBarrier
讓一組執行緒到達一個屏障時阻塞,直到最後一個執行緒到達屏障時,屏障才會開門,所有被阻塞的執行緒才會繼續執行下去。
CyclicBarrier barrier = new CyclicBarrier(2); barrier.await();//阻塞於屏障,直到最後一個執行緒到達屏障。 CyclicBarrier barrier = new CyclicBarrier(2, Runable());//這種構造方式下,最後一個屏障到達時,優先執行建構函式中指定的操作。
控制併發執行緒數的Semaphore
Semphore s = new Semphore(10); s.acquire(); s.release();
執行緒間交換資料的Exchanger
Exchanger<String> exgr = new Exchanger<>(); exgr.exchange("i am cool");//執行緒A String res = exgr.exchange("i am beautiful");//執行緒B,res = "i am cool"