欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java 同步器SynchronousQueue詳解及實(shí)例

 更新時(shí)間:2017年05月22日 11:15:44   投稿:lqh  
這篇文章主要介紹了java 同步器SynchronousQueue詳解及實(shí)例的相關(guān)資料,需要的朋友可以參考下

同步器簡(jiǎn)介

       學(xué)習(xí)以來(lái)對(duì)線程的操作有很大的改觀,從c/c++的mutex到j(luò)ava的各種鎖(當(dāng)然不是嫌麻煩,java讀寫(xiě)鎖的實(shí)現(xiàn)還是帶來(lái)不少好處的,但是sokcet的設(shè)計(jì)我就不敢恭維了,tcp和udp是兩個(gè)類,弄得我現(xiàn)在對(duì)udp也不怎么熟悉)。其中最讓我感到特別剛需的設(shè)計(jì)就是同步器,除了countdownlatch,剩下的都比較剛需,cyclicbarrier我現(xiàn)在唯一能感覺(jué)他的好用處就是循環(huán)打印a,b,exchanger和SynchronousQueue我一直沒(méi)發(fā)現(xiàn)什么作用,兩個(gè)就適合生產(chǎn)者消費(fèi)者問(wèn)題。以上就是四大同步器,聽(tīng)說(shuō)過(guò)2個(gè)以上的就很厲害了,有些場(chǎng)合太難想了。

場(chǎng)景思路

      這次說(shuō)最后兩個(gè)用的場(chǎng)景吧,我要做的事情呢,是采集一堆數(shù)據(jù),然后采集另外的數(shù)據(jù)綜合處理,但是兩個(gè)數(shù)據(jù)是和時(shí)間相關(guān)的,如果順序執(zhí)行的話,那么處理結(jié)果的可信度越低,最初的設(shè)想就是利用異步處理,兩個(gè)數(shù)據(jù)采集同時(shí)進(jìn)行,然后一起處理,futuretask,就作為首選,我的采集信息還是周期性的任務(wù),必需要用定時(shí)的線程池了,但是這種線程池(別說(shuō)timer,這個(gè)類更建議用線程池替換)并沒(méi)有為異步處理做返回值,我也沒(méi)辦法直接獲取處理的數(shù)據(jù)了,無(wú)奈的情況下只能用線程來(lái)做了,同時(shí)也必須要用同步器來(lái)同步了,用手動(dòng)阻塞線程然后喚醒這個(gè)行為實(shí)在是太不可取了,你全喚醒了,可能造成不該運(yùn)行的代碼開(kāi)始運(yùn)行,喚醒單個(gè),還得看cpu的調(diào)度,于是想到了exchanger和SynchronousQueue,我最終選取了SynchronousQueue。

SynchronousQueue

        其實(shí)就是特殊的阻塞隊(duì)列,特殊就特殊在他最多放一個(gè)元素,而且這個(gè)元素不在特定的時(shí)間消費(fèi)掉就沒(méi)了,而且永遠(yuǎn)長(zhǎng)度都是0,具體看api就發(fā)現(xiàn)能用的方法沒(méi)幾個(gè),3個(gè)是放入,2個(gè)是取走。

demo

生產(chǎn)者,消息最多存放1分鐘

public void run() {
  try {
  queue.offer(i++,1,TimeUnit.MINUTES);
  } catch (InterruptedException e) {
  e.printStackTrace();
  }
  System.out.println("add");

 }

消費(fèi)者

System.out.println(queue.poll(1,TimeUnit.SECONDS));

用了這個(gè)同步器,這種定時(shí)生產(chǎn)者消費(fèi)者問(wèn)題,代碼量就很少,不需要自己再寫(xiě)同步的代碼了。也避免了最初喚醒阻塞帶來(lái)的不可預(yù)估性。

感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

相關(guān)文章

  • Java實(shí)現(xiàn)占位符名稱替換值

    Java實(shí)現(xiàn)占位符名稱替換值

    占位符現(xiàn)在應(yīng)該說(shuō)是比較流行的動(dòng)態(tài)賦值,本文主要介紹了Java占位符名稱替換值,根據(jù)一串帶著參數(shù)名占位符的url,替換掉對(duì)應(yīng)參數(shù)名的值,感興趣的可以了解一下
    2021-07-07
  • Java實(shí)現(xiàn)2048小游戲(可直接運(yùn)行)

    Java實(shí)現(xiàn)2048小游戲(可直接運(yùn)行)

    這篇文章主要給大家介紹了關(guān)于Java實(shí)現(xiàn)2048小游戲的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • java中的GC收集器詳情

    java中的GC收集器詳情

    這篇文章主要介紹了java中的GC收集器,GC(Garbage collection )指的是程序內(nèi)存管理分手動(dòng)和自動(dòng),手動(dòng)內(nèi)存管理,需要我們編程的時(shí)候顯式分配和釋放空間,但如果忘記釋放,會(huì)造成嚴(yán)重的內(nèi)存泄漏問(wèn)題,下面文章內(nèi)容我們就來(lái)實(shí)例說(shuō)明情況,需要的朋友可以參考一下
    2021-10-10
  • SpringBoot 自動(dòng)配置失效的解決方法

    SpringBoot 自動(dòng)配置失效的解決方法

    本文主要介紹了SpringBoot 自動(dòng)配置失效的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • SpringMVC 數(shù)據(jù)校驗(yàn)方法(必看篇)

    SpringMVC 數(shù)據(jù)校驗(yàn)方法(必看篇)

    下面小編就為大家?guī)?lái)一篇SpringMVC 數(shù)據(jù)校驗(yàn)方法(必看篇)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-06-06
  • Java?Stream比較兩個(gè)List的差異并取出不同的對(duì)象四種方法

    Java?Stream比較兩個(gè)List的差異并取出不同的對(duì)象四種方法

    今天開(kāi)發(fā)一個(gè)需求時(shí)要對(duì)A和B兩個(gè)List集合遍歷,并比較出集合A有,而集合B沒(méi)有的值,下面這篇文章主要給大家介紹了關(guān)于Java?Stream比較兩個(gè)List的差異并取出不同對(duì)象的四種方法,需要的朋友可以參考下
    2024-01-01
  • Spring Data JPA使用Sort進(jìn)行排序(Using Sort)

    Spring Data JPA使用Sort進(jìn)行排序(Using Sort)

    本篇文章主要介紹了Spring Data JPA使用Sort進(jìn)行排序(Using Sort),具有一定的參考價(jià)值,有興趣的可以了解一下
    2017-07-07
  • java calendar 日期實(shí)現(xiàn)不斷加一天的代碼

    java calendar 日期實(shí)現(xiàn)不斷加一天的代碼

    這篇文章主要介紹了java calendar 日期實(shí)現(xiàn)不斷加一天的代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-10-10
  • Java異常處理學(xué)習(xí)心得

    Java異常處理學(xué)習(xí)心得

    本篇文章給大家詳細(xì)講述了學(xué)習(xí)Java異常處理學(xué)習(xí)的心得以及原理介紹,對(duì)此有興趣的朋友參考下吧。
    2018-01-01
  • mybatis注解之@Mapper和@MapperScan的使用

    mybatis注解之@Mapper和@MapperScan的使用

    這篇文章主要介紹了mybatis注解之@Mapper和@MapperScan的使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10

最新評(píng)論