波多野结衣 蜜桃视频,国产在线精品露脸ponn,a v麻豆成人,AV在线免费小电影

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

要學(xué)習(xí)多線程一些基本的同步類也是不得不學(xué)習(xí)的,這里主要講一點(diǎn)基本的概念與使用。

阻塞隊(duì)列

阻塞隊(duì)列提供可阻塞的put和take方法,支持定時(shí)的offer和poll方法,如果隊(duì)列已經(jīng)滿了,那么put方法將阻塞直到有空間可用;如果隊(duì)列為空,那么take方法將會(huì)阻塞直到有元素可用;同時(shí)隊(duì)列可以是有界也可以是無(wú)界的,無(wú)界隊(duì)列永遠(yuǎn)都不會(huì)充滿,因此無(wú)界隊(duì)列的put方法永遠(yuǎn)不會(huì)阻塞;

JAVA中的阻塞隊(duì)列主要有以實(shí)現(xiàn)BlockingQueue接口的幾個(gè)類,其中LinkedBlockingQueue、ArrayBlockingQueue對(duì)應(yīng)LinkedList與ArrayList,他們是先進(jìn)先出隊(duì)列(FIFO);阻塞隊(duì)列能夠?qū)崿F(xiàn)生產(chǎn)者與消費(fèi)者的關(guān)系,生產(chǎn)者往隊(duì)列中put數(shù)據(jù),而消費(fèi)者往take中拉取數(shù)據(jù),進(jìn)而實(shí)現(xiàn)異步操作。曾經(jīng)的生產(chǎn)中的例子簡(jiǎn)化后如下圖:

阻塞隊(duì)列實(shí)現(xiàn)生產(chǎn)者消費(fèi)者以及同步工具類

 

隊(duì)列還有一些實(shí)現(xiàn)比如:

PriorityBlockingQueue隊(duì)列是優(yōu)先級(jí)隊(duì)列,根據(jù)元素的比較來(lái)控制順序;

SynchronousQueue隊(duì)列維護(hù)的不是元素而是線程,這些線程在等待把元素加入或者移除隊(duì)列,就好像餐館出菜,前面的隊(duì)列都是把菜炒好了放到放菜的地方,服務(wù)員一個(gè)一個(gè)拿走,而SynchronousQueue則沒有放菜的地方,廚師炒好菜直接給服務(wù)員端走,所以SynchronousQueue要求消費(fèi)者足夠多,并且總是有至少一個(gè)消費(fèi)者在等待才適合用。

同步工具類

閉鎖

閉鎖:可以延遲線程的進(jìn)度直到其到達(dá)終止?fàn)顟B(tài)。閉鎖相當(dāng)于一個(gè)閘門,在閉鎖到達(dá)結(jié)束狀態(tài)之前,這個(gè)閘門一直是關(guān)閉的,任何線程都不能通過當(dāng)?shù)竭_(dá)結(jié)束狀態(tài)時(shí),閘門允許所有線程通過,閉鎖到達(dá)結(jié)束狀態(tài)后不會(huì)再改變狀態(tài)閉鎖。

閉鎖主要作用是可以用來(lái)確保一些活動(dòng)直到其他活動(dòng)都完成后才繼續(xù)執(zhí)行。比如一個(gè)初始化需要等另一個(gè)初始化,比如所有玩家都準(zhǔn)備才開始。

CountDownLatch是一種閉鎖實(shí)現(xiàn),它初始化一個(gè)正數(shù),countDown方法使數(shù)字遞減,await方法使線程等待計(jì)數(shù)器到0,否則阻塞,示例如下圖:

阻塞隊(duì)列實(shí)現(xiàn)生產(chǎn)者消費(fèi)者以及同步工具類

 

這個(gè)方法主要用來(lái)統(tǒng)計(jì)一個(gè)任務(wù)在多個(gè)線程同步執(zhí)行下消耗時(shí)間,利用兩個(gè)閉鎖實(shí)現(xiàn)了線程先一起準(zhǔn)備好,然后放開開始閉鎖,所有線程一起執(zhí)行,每個(gè)線程最后都會(huì)countDown一下結(jié)束閉鎖,當(dāng)所有線程執(zhí)行完成結(jié)束閉鎖也就方法,這樣就可以實(shí)現(xiàn)統(tǒng)計(jì)所有線程一起執(zhí)行消耗的時(shí)間。

FutureTask

FutrueTask是一個(gè)實(shí)現(xiàn)了Runnable的類,并且它可以獲取到線程的執(zhí)行結(jié)果,get方法執(zhí)行取決于任務(wù)的狀態(tài),如果任務(wù)已經(jīng)完成,那么get會(huì)立即返回結(jié)果,否則get將

阻塞直到任務(wù)進(jìn)入完成狀態(tài),可以利用它的這個(gè)功能來(lái)實(shí)現(xiàn)閉鎖

它還可以用來(lái)異步提前計(jì)算一些比較耗性能的值,比如一個(gè)操作比較耗性能那么可以讓它先執(zhí)行,等到需要計(jì)算的結(jié)果的時(shí)候在get。

信號(hào)量

計(jì)數(shù)信號(hào)量(Counting Semaphore)用來(lái)控制同時(shí)訪問某個(gè)特定資源的操作數(shù)量,或者同時(shí)執(zhí)行某個(gè)指定操作的數(shù)量

實(shí)現(xiàn)原理是:Semaphore管理著一組虛擬的許可,執(zhí)行操作前必須先acquire獲得許可,這個(gè)許可就減一,如果許可被減到0,線程再來(lái)獲取許可就阻塞等待其他線程在操作完成后release釋放許可;

比如初始化了一定數(shù)量的數(shù)據(jù)庫(kù)線程池,每個(gè)線程獲取線程池時(shí)先acquire,如果獲取成功說(shuō)明有線程繼續(xù)執(zhí)行,如果沒有線程了acquire方法會(huì)阻塞等待有多余線程。

還可以把計(jì)數(shù)信號(hào)量的數(shù)量設(shè)置為1,那么只要有一個(gè)線程acquire成功,其他線程就只能等待直到線程release,這樣就實(shí)現(xiàn)了一個(gè)互斥鎖。

柵欄

柵欄類似于閉鎖,他也是阻塞一組線程直到某個(gè)事件發(fā)生,區(qū)別在于柵欄是等待所有線程到達(dá)指定,而閉鎖是等待一個(gè)事件,閉鎖是一次性的不會(huì)重置。閉鎖是等待其他線程執(zhí)行完成等待線程才開始執(zhí)行,而柵欄是讓每個(gè)線程都等待,直到所有線程都是等待狀態(tài),那么所有線程一起繼續(xù)執(zhí)行

可能有點(diǎn)不好理解,通過下面一個(gè)例子和閉鎖例子進(jìn)行對(duì)比,示例如下圖:

阻塞隊(duì)列實(shí)現(xiàn)生產(chǎn)者消費(fèi)者以及同步工具類

 

不管執(zhí)行多少次,一定是所有的"開始"打印完成后才會(huì)打印"結(jié)束",并且如果線程的數(shù)量沒有初始化柵欄的值多,所有線程都會(huì)處于阻塞狀態(tài)。

總結(jié)

今天總結(jié)了一點(diǎn)阻塞隊(duì)列的知識(shí)和應(yīng)用,平時(shí)一些消耗性能而創(chuàng)建線程去異步執(zhí)行可能會(huì)造成線程太多的情況,可以簡(jiǎn)單的通過阻塞隊(duì)列來(lái)實(shí)現(xiàn)生產(chǎn)者消費(fèi)者的方式來(lái)解決問題。

還總結(jié)了一點(diǎn)同步工具類的知識(shí),主要是理解這些基本概念和使用場(chǎng)景,閉鎖通過觸發(fā)countDown來(lái)減少計(jì)數(shù)器,當(dāng)計(jì)數(shù)器減到0,await方法放行。信號(hào)量則是acquire方法去獲取release方法去釋放,柵欄則是先運(yùn)行到await地方的線程先等待,等到所有線程都到了再一起執(zhí)行,尤其要理解閉鎖和柵欄的區(qū)別。

閉鎖用來(lái)確保一些活動(dòng)執(zhí)行完成才執(zhí)行一些操作,信號(hào)量用來(lái)保證某些操作的數(shù)量,柵欄用來(lái)等待所有操作一起到達(dá)指定點(diǎn)再一起繼續(xù)執(zhí)行。

Java程序員日常學(xué)習(xí)筆記,如理解有誤歡迎各位交流討論!

分享到:
標(biāo)簽:隊(duì)列 阻塞
用戶無(wú)頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫(kù),初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定