一個有關(guān)定時生產(chǎn)與消費的問題

一睬愤、前言

本文來講解遇到的一個有意思的與定時器相關(guān)的生產(chǎn)消費模型,模型如下圖:


image.png
  • 生產(chǎn)者是一個定時器線程界阁,使用ScheduledThreadPoolExecutor的scheduleAtFixedRate控制每間隔3s投遞一個元素到隊列1沦泌,2,3(使用offer方法)拌夏。比如第1s放入一個元素到隊列1,2盆顾,3诬像,這時候每個隊列里面有一個元素屋群。然后第4s在放入一個元素到隊列1,2坏挠,3芍躏,如果沒有消費線程的時候這時候每個隊列里面有2個元素.

  • 隊列為有界阻塞隊列(ArrayBlockingQueue),隊列元素的大小設(shè)置為6個元素降狠。

  • 消費者是一個定時器線程对竣,使用ScheduledThreadPoolExecutor的scheduleAtFixedRate控制每間隔1s輪詢?nèi)〕雒總€隊列里面全部元素(使用poll方法)。比如第1s取出隊列1里面的全部元素榜配,第2s取出隊列2里面的元素否纬,第3s取出隊列3里面的元素,第4s取出隊列1里面的元素....
    并且如果發(fā)現(xiàn)當(dāng)前隊列為空則會結(jié)束當(dāng)前s的任務(wù)蛋褥,然后等下1s到了的時候從下一個隊列開始取临燃。

  • 消費線程啟動后,生產(chǎn)線程才啟動烙心,生產(chǎn)者和消費者線程優(yōu)先級相同

  • 消費線程和生產(chǎn)線程里面沒有耗時操作膜廊,或者耗時都不超過1s。這個保證定時器任務(wù)不會被延遲執(zhí)行淫茵。

問題:每個隊列里面最多時候會有幾個元素爪瓜?

二、分析

  • (1)假設(shè)第1s時候消費線程去獲取第一個隊列元素痘昌,這時候第一個隊列為空钥勋,則當(dāng)前任務(wù)結(jié)束,消費線程等到第2s時候會去第二個隊列取元素辆苔。
  • (2)假設(shè)第1.000000000001s時候生產(chǎn)者線程放入元素到每個隊列算灸,這時候每個隊列有一個元素
  • (3)第2s時候消費者線程去獲取第二個隊列元素,里面有一個元素驻啤,取出后菲驴,隊列為空
  • (4)第3s時候消費者線程去獲取第三個隊列元素,里面有一個元素骑冗,取出后赊瞬,隊列為空
  • (5)第4s時候消費者線程去獲取第一個隊列元素,里面有一個元素贼涩,取出后巧涧,隊列為空。
  • (6)第4.000000000001s時候生成者線程放入元素到每個隊列遥倦,這時候每個隊列元素為1個谤绳。

按照上面的邏輯看的話,每個隊列里面最多有一個元素。其實不然缩筛,因為在多線程模型中每個線程占用cpu執(zhí)行的時間是按照時間片來劃分的消略,每個線程執(zhí)行完自己的時間片后會被掛起,然后下一個獲取到時間片的線程會占用CPU執(zhí)行自己的任務(wù)瞎抛,當(dāng)下一輪被掛起的線程獲取到自己的時間片后艺演,會恢復(fù)執(zhí)行上下文從之前被掛起的地方執(zhí)行。

所以這里步驟(6)并不能保證比步驟(5)先執(zhí)行桐臊,有可能消費線程在執(zhí)行步驟(5)前時間片用完了胎撤,則這時候消費線程會被掛起,而如果現(xiàn)在生產(chǎn)者線程獲取到了cpu并且到達了定時執(zhí)行任務(wù)的時間點,則步驟(6)會執(zhí)行豪硅,那么這時候隊列一哩照,里面會有2個元素挺物,那么等消費線程獲取CPU時間片執(zhí)行時候會從隊列1里面拿到2個元素懒浮。

注:這里使用1.000000000001s是為了說明和1s比較接近,其實由于影響調(diào)度因素很多识藤,有可能有比這更接近1s的時間

三砚著、總結(jié)

多線程下會遇到很多微妙的情況,有時候遇到的問題要結(jié)合OS的知識才能解釋清楚痴昧,本節(jié)從其中一個角度分析了每個隊列里面有可能會有兩個元素的原因稽穆,歡迎大家補充其他原因,并考慮會不會存在一個隊列里面最多時候有3個元素的情況

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末赶撰,一起剝皮案震驚了整個濱河市舌镶,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌豪娜,老刑警劉巖餐胀,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異瘤载,居然都是意外死亡否灾,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進店門鸣奔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來墨技,“玉大人,你說我怎么就攤上這事挎狸】弁簦” “怎么了?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵锨匆,是天一觀的道長崭别。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么紊遵? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任账千,我火速辦了婚禮,結(jié)果婚禮上暗膜,老公的妹妹穿的比我還像新娘匀奏。我一直安慰自己,他們只是感情好学搜,可當(dāng)我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布娃善。 她就那樣靜靜地躺著,像睡著了一般瑞佩。 火紅的嫁衣襯著肌膚如雪聚磺。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天炬丸,我揣著相機與錄音瘫寝,去河邊找鬼。 笑死稠炬,一個胖子當(dāng)著我的面吹牛焕阿,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播首启,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼暮屡,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了毅桃?” 一聲冷哼從身側(cè)響起褒纲,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎钥飞,沒想到半個月后莺掠,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡代承,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年汁蝶,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片论悴。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡掖棉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出膀估,到底是詐尸還是另有隱情幔亥,我是刑警寧澤,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布察纯,位于F島的核電站帕棉,受9級特大地震影響针肥,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜香伴,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一慰枕、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧即纲,春花似錦具帮、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至膊畴,卻和暖如春掘猿,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背唇跨。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工稠通, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人轻绞。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓采记,卻偏偏與公主長得像佣耐,于是被迫代替她去往敵國和親政勃。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,452評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 一兼砖、多線程 說明下線程的狀態(tài) java中的線程一共有 5 種狀態(tài)奸远。 NEW:這種情況指的是,通過 New 關(guān)鍵字創(chuàng)...
    Java旅行者閱讀 4,662評論 0 44
  • 今天是夏至讽挟,由于昨天家里的小狗出了意外懒叛,離我們而去,昨天到今天心情都不是很好耽梅,即使看盤薛窥,也是心不在焉的。 1眼姐、先來...
    王沐妍閱讀 262評論 0 1
  • 這個周的學(xué)習(xí)和收獲么诅迷?工作上:能夠端正自己的心態(tài)了。把工作當(dāng)成是一件事情來做众旗。從中找到樂趣和成就感罢杉。知道老大的心理...
    白色薔薇香閱讀 118評論 0 0
  • Re模塊支持強大而且更通用的Perl風(fēng)格的正則表達式,該模塊允許多個線程共享同一個已編譯的正則表達式對象贡歧。在模式匹...
    開羅酒吧閱讀 290評論 0 0
  • 我站在局外者的位置滩租,看著同齡人一次次重復(fù)我過去的路 女性看女性赋秀,關(guān)注點是服飾與妝容;男性看女性律想,關(guān)注點是容貌與身材...
    24e2f6668318閱讀 101評論 0 0