亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java中有哪些常用的工具類

發布時間:2021-05-20 15:24:47 來源:億速云 閱讀:190 作者:Leah 欄目:開發技術

今天就跟大家聊聊有關Java中有哪些常用的工具類,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

一、線程協作、控制并發流程的工具類

 什么是控制并發流程?

控制并發流程的工具類,作用就是幫助我們程序員更容易得讓線程之間合作讓線程之間相互配合,來滿足業務邏輯比如讓線程A等待線程B執行完畢后再執行等合作策略

Java中有哪些常用的工具類

二、CountDownLatch倒計時門閂

倒數門:

例子:購物拼團;大巴,人滿才會發車

流程:倒數結束之前,一直處于等待狀態,直到倒計時結束,此線程才繼續工作。
開始 -> 進入等待 -> 倒數結束 -> 繼續工作

類的主要方法介紹:

CountDownLatch(int count):僅有一個構造函數,參數count為需要倒數的數值

await():調用await()方法的線程會被掛起,他會等待直到count值為0才繼續執行。
countDown():將count值減1,直到為0時,等待的線程才會被喚起。

圖解await和countDown方法:

Java中有哪些常用的工具類

構造方式代碼:

Java中有哪些常用的工具類

注意點:

擴展用法:多個線程等多個線程執行完成后,再同時執行

CountDownLatch是不能夠重用的,如果需要重新計數,可以考慮使用CyclicBarrier或者創建新的CountDownLatch實例

三、Semaphore信號量

Semaphore可以用來限制或管理數量有限的資源的使用情況信號量的作用是維護一個許可證的計數,線程可以獲取許可證,那信號量剩余的許可證就加一,當信號量所擁有的許可證數量為0,name下一個還想要獲取許可證的線程,就需要等待,知道另外別的線程釋放了許可證

Java中有哪些常用的工具類

信號量用法:

初始化Semaphore并指定許可證數量

在需要被線程在的代碼前加acquire()或者acquireUninterruptibly()方法

在任務執行結束后,調用release()來釋放許可證

信號量主要方法介紹:

  •  acquire():獲取許可證,可以中斷

  • acquireUninterruptibly():獲取許可證,不能中斷

  • release():歸還許可證(一定不能忘記,線程不會自動歸還)new Semaphore(int permits, boolean fair):這里可以設置是否使用公平策略,如果傳入為true,nameSemaphore會把之前等待的線程放到FIFO的隊列里,以便于當有了新的許可證,可以分發給之前等了最長時間的線程

  • tryAcquire():看看現在有沒有空閑的許可證,如果有就獲取,如果沒有就做別的事。

  • tryAcquire(timeout):和tryAcquire一樣,但是多了一個超時時間,比如在3秒內獲取不到許可證,就做別的事。

構造方式代碼:

Java中有哪些常用的工具類

注意點:

獲取和釋放的許可證數量必須一致否則比如每次都獲取2個,但是只釋放1個,隨著時間的推移,到最后許可證數量不夠用,會導致程序科四。

注意在初始化Semaphore的時候設置公平性,一般設置為true更合理。

并不是必須由獲取許可證的線程釋放那個許可證,事實上,獲取和釋放許可證對線程并無要求,也許是A獲取了,然后由B釋放,只要邏輯合理即可

信號量的作用,處理控制臨界區最多同時有N個線程訪問外,另一個作用是可以實現“條件等待”,例如線程1需要線程2完成準備工作后才能開始執行,那么就線程1acquire,而線程2執行之后release,這樣的話,相當于是輕量級的CountDownLatch

四、Condition接口(又稱條件對象)

Condition作用

  • 當線程1需要等待某個條件的時候,他就去執行condition.await()方法,一旦執行了await()方法,線程就進入阻塞狀態。

  • 然后通常會有另外一個線程,假設是線程2,去執行對應的條件,知道這個條件達成的時候,線程2就會去執行condition.signal()方法,這時JVM就會從被阻塞的線程里找到那些等待該condition的線程,當線程1就會收到可執行信息的時候,他的線程狀態就會變成Runnable可執行狀態

 signalAll()和signal()區別

  • signalAll():會喚起所有正在等待的線程

  • signal:只會喚起那個等待時間最長的線程

構造方式代碼:

Java中有哪些常用的工具類

注意點:

  • 實際上,如果說lock用來代替synchronized,那么Condition就是用來代替相對應的Object.wait/notify的,所以在用法和性質上,幾乎都一樣

  • await方法會自動釋放持有的lock鎖,和Object.wait一樣,不需要自己手動釋放鎖

  • 調用await的時候,必須持有鎖,否則會拋出異常

CyclicBarrier循環柵欄

  • CyclicBarrier循環柵欄和CountDownLatch很類似,都能阻塞一組線程

  • 當有大量線程相互配合,分別計算不同任務,并且需要最后統一匯總的時候,我們可以使用CyclicBarrier。CyclicBarrier可以構造一個集結點,當某一個線程執行完畢,他就會到集結點等待,直到所有線程都到了集結點,那么該柵欄就會被撤銷,所有線程再統一出發,繼續執行剩下的任務。

代碼演示:

Java中有哪些常用的工具類

五、CyclicBarrier和CountDownLatch的區別

  • 作用不同:CyclicBarrier要等固定數量的線程都達到了柵欄位置才能繼續執行,兒CountDownLatch只需要等待數字到0,也就是說,CountDownLatch用于時間,但是CyclicBarrier是用于線程的

  • 可重用性不同:CountDownLatch在倒數到0并觸發門閂打開后,就不能再次使用了,除非新建新的實例;而CyclicBarrier可以重復使用。

Java是什么

Java是一門面向對象編程語言,可以編寫桌面應用程序、Web應用程序、分布式系統和嵌入式系統應用程序。

看完上述內容,你們對Java中有哪些常用的工具類有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

安平县| 东乡族自治县| 鲁甸县| 弥渡县| 攀枝花市| 昭通市| 永昌县| 广西| 株洲市| 武平县| 花莲县| 临桂县| 龙南县| 五常市| 句容市| 白朗县| 洛川县| 大连市| 自贡市| 萨迦县| 宝清县| 广昌县| 石阡县| 罗平县| 广河县| 靖远县| 莫力| 阳曲县| 云梦县| 连平县| 聂拉木县| 瓦房店市| 邯郸县| 凌海市| 夏河县| 武宣县| 余江县| 石家庄市| 喀喇| 平乡县| 纳雍县|