最近又有針對性的學習了java中的多線程,看到了高級同步對象:信號量,倒數閘門,循環屏蔽,對象交換器 java
雖然有volatile,final,synchronized,lock等能夠簡單實現,但沒有更高層次的抽象,而高級同步對象則能夠,下面只是簡單總結了一下本身學過的,只是稍微提一下 多線程
---------------------------------------------------------- 學習
信號量:使用java.util.concurrent.semaphore類,建立對象時要指定資源的可用數,經過acquire方法以阻塞的方式獲取許可,而tryacquire方法以非阻塞方式來獲取,當須要釋放時,使用release方法,同時semaphore類也支持同時獲取和釋放多個資源的許可,經過acquire法來獲取許但是可被打斷的,若是不但願被打斷能夠使用acquireUninterruptibly方法 ui
倒數閘門:使用java.util.concurrent.CountDownLatch類,,CountDownLatch就想當於多個線程等待開啓的一個閘門,latch就是閘門的意思,也就是隻有在某個線程完成任務以後,,閘門纔會打開,等待的線程才能運行,在建立CountDownLatch對象時指定等待完成的任務數目。循環閘門是一次性的,,不能循環使用。 線程
循環屏蔽:循環屏蔽相似於倒數閘門,,使用java.util.concurrent.CyclicBarrier來表示循環屏障,對象在建立時須要指定該對象的線程數目,若是在參與線程中有一個在等待的過程當中被中斷,出現超時或其餘錯去,整個循環屏蔽會失效,拋出java.util.concurrent.BrokenBarrierException異常 對象