最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java常用工具類總結(jié)

 更新時間:2021年05月20日 11:19:21   作者:三3三  
今天帶大家學(xué)習(xí)Java常用工具類,文中有非常詳細的圖文解說及代碼示例,對正在學(xué)習(xí)java的小伙伴們很有幫助,需要的朋友可以參考下

一、線程協(xié)作、控制并發(fā)流程的工具類

 什么是控制并發(fā)流程?

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

在這里插入圖片描述

二、CountDownLatch倒計時門閂

倒數(shù)門:

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

流程:倒數(shù)結(jié)束之前,一直處于等待狀態(tài),直到倒計時結(jié)束,此線程才繼續(xù)工作。
開始 -> 進入等待 -> 倒數(shù)結(jié)束 -> 繼續(xù)工作

類的主要方法介紹:

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

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

圖解await和countDown方法:

在這里插入圖片描述

構(gòu)造方式代碼:

在這里插入圖片描述

注意點:

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

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

三、Semaphore信號量

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

在這里插入圖片描述

信號量用法:

初始化Semaphore并指定許可證數(shù)量

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

在任務(wù)執(zhí)行結(jié)束后,調(diào)用release()來釋放許可證

信號量主要方法介紹:

  •  acquire():獲取許可證,可以中斷
  • acquireUninterruptibly():獲取許可證,不能中斷
  • release():歸還許可證(一定不能忘記,線程不會自動歸還)new Semaphore(int permits, boolean fair):這里可以設(shè)置是否使用公平策略,如果傳入為true,nameSemaphore會把之前等待的線程放到FIFO的隊列里,以便于當(dāng)有了新的許可證,可以分發(fā)給之前等了最長時間的線程
  • tryAcquire():看看現(xiàn)在有沒有空閑的許可證,如果有就獲取,如果沒有就做別的事。
  • tryAcquire(timeout):和tryAcquire一樣,但是多了一個超時時間,比如在3秒內(nèi)獲取不到許可證,就做別的事。

構(gòu)造方式代碼:

在這里插入圖片描述

注意點:

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

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

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

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

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

Condition作用

  • 當(dāng)線程1需要等待某個條件的時候,他就去執(zhí)行condition.await()方法,一旦執(zhí)行了await()方法,線程就進入阻塞狀態(tài)。
  • 然后通常會有另外一個線程,假設(shè)是線程2,去執(zhí)行對應(yīng)的條件,知道這個條件達成的時候,線程2就會去執(zhí)行condition.signal()方法,這時JVM就會從被阻塞的線程里找到那些等待該condition的線程,當(dāng)線程1就會收到可執(zhí)行信息的時候,他的線程狀態(tài)就會變成Runnable可執(zhí)行狀態(tài)

 signalAll()和signal()區(qū)別

  • signalAll():會喚起所有正在等待的線程
  • signal:只會喚起那個等待時間最長的線程

構(gòu)造方式代碼:

在這里插入圖片描述

注意點:

  • 實際上,如果說lock用來代替synchronized,那么Condition就是用來代替相對應(yīng)的Object.wait/notify的,所以在用法和性質(zhì)上,幾乎都一樣
  • await方法會自動釋放持有的lock鎖,和Object.wait一樣,不需要自己手動釋放鎖
  • 調(diào)用await的時候,必須持有鎖,否則會拋出異常

CyclicBarrier循環(huán)柵欄

  • CyclicBarrier循環(huán)柵欄和CountDownLatch很類似,都能阻塞一組線程
  • 當(dāng)有大量線程相互配合,分別計算不同任務(wù),并且需要最后統(tǒng)一匯總的時候,我們可以使用CyclicBarrier。CyclicBarrier可以構(gòu)造一個集結(jié)點,當(dāng)某一個線程執(zhí)行完畢,他就會到集結(jié)點等待,直到所有線程都到了集結(jié)點,那么該柵欄就會被撤銷,所有線程再統(tǒng)一出發(fā),繼續(xù)執(zhí)行剩下的任務(wù)。

代碼演示:

在這里插入圖片描述

五、CyclicBarrier和CountDownLatch的區(qū)別

  • 作用不同:CyclicBarrier要等固定數(shù)量的線程都達到了柵欄位置才能繼續(xù)執(zhí)行,兒CountDownLatch只需要等待數(shù)字到0,也就是說,CountDownLatch用于時間,但是CyclicBarrier是用于線程的
  • 可重用性不同:CountDownLatch在倒數(shù)到0并觸發(fā)門閂打開后,就不能再次使用了,除非新建新的實例;而CyclicBarrier可以重復(fù)使用。

到此這篇關(guān)于Java常用工具類總結(jié)的文章就介紹到這了,更多相關(guān)Java工具類內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring事務(wù)處理原理步驟詳解

    Spring事務(wù)處理原理步驟詳解

    這篇文章主要介紹了Spring事務(wù)處理原理步驟詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-03-03
  • 基于ArrayList常用方法的源碼全面解析

    基于ArrayList常用方法的源碼全面解析

    下面小編就為大家?guī)硪黄贏rrayList常用方法的源碼全面解析。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • 關(guān)于SpringBoot自定義條件注解與自動配置

    關(guān)于SpringBoot自定義條件注解與自動配置

    這篇文章主要介紹了關(guān)于SpringBoot自定義條件注解與自動配置,Spring Boot的核心功能就是為整合第三方框架提供自動配置,而本文則帶著大家實現(xiàn)了自己的自動配置和Starter,需要的朋友可以參考下
    2023-07-07
  • SpringBean依賴和三級緩存的案例講解

    SpringBean依賴和三級緩存的案例講解

    這篇文章主要介紹了SpringBean依賴和三級緩存的案例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • Java實現(xiàn)FIFO功能的完整代碼實踐

    Java實現(xiàn)FIFO功能的完整代碼實踐

    在軟件開發(fā)中,隊列(Queue)是一種常見的數(shù)據(jù)結(jié)構(gòu),其特點是先進先出(FIFO,First In First Out),FIFO 隊列在生產(chǎn)者-消費者模型、任務(wù)調(diào)度、緩沖區(qū)管理等場景中具有廣泛的應(yīng)用,本文給大家介紹了Java實現(xiàn)FIFO功能的完整代碼實踐,需要的朋友可以參考下
    2025-03-03
  • RocketMQ順序消息的原理與特點

    RocketMQ順序消息的原理與特點

    RocketMQ作為一款純java、分布式、隊列模型的開源消息中間件,支持事務(wù)消息、順序消息、批量消息、定時消息、消息回溯等,本篇我們了解如何實現(xiàn)順序消息的原理與特點
    2023-02-02
  • Java split()方法中的特殊符號舉例詳解

    Java split()方法中的特殊符號舉例詳解

    Java中的split方法可以將一個字符串按照指定的分隔符進行分割,返回一個字符串?dāng)?shù)組,這篇文章主要給大家介紹了關(guān)于Java split()方法中的特殊符號的相關(guān)資料,需要的朋友可以參考下
    2023-07-07
  • SpringMVC實現(xiàn)登錄與注冊功能的詳細步驟

    SpringMVC實現(xiàn)登錄與注冊功能的詳細步驟

    本文介紹了如何通過Maven配置依賴,創(chuàng)建前端登錄和注冊頁面,并實現(xiàn)后端邏輯,詳細步驟包括配置文件、創(chuàng)建User類、配置中文過濾器及DispatcherServlet,并使用Spring?MVC和JQuery處理前端請求,需要的朋友可以參考下
    2024-11-11
  • 快速了解JAVA垃圾回收機制

    快速了解JAVA垃圾回收機制

    這篇文章主要介紹了有關(guān)Java垃圾回收機制的知識,文中實例簡單易懂,方便大家更好的學(xué)習(xí),有興趣的朋友可以了解下
    2020-06-06
  • java實現(xiàn)停車場管理系統(tǒng)

    java實現(xiàn)停車場管理系統(tǒng)

    這篇文章主要為大家詳細介紹了java實現(xiàn)停車場管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-11-11

最新評論

八宿县| 晋中市| 宣汉县| 葵青区| SHOW| 噶尔县| 蒙阴县| 横峰县| 阜新市| 清镇市| 连江县| 郧西县| 台中市| 余江县| 名山县| 浮山县| 闽清县| 恩平市| 永胜县| 霍林郭勒市| 德保县| 吴忠市| 云南省| 吉木乃县| 鹰潭市| 扎囊县| 崇信县| 西华县| 平江县| 新野县| 梅州市| 潮州市| 虞城县| 海伦市| 阿拉尔市| 凤翔县| 松滋市| 许昌县| 丹江口市| 禄丰县| 牙克石市|