日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁(yè) > 科技  > 軟件

為了讓小白也能看懂這個(gè)死鎖Case,我請(qǐng)來(lái)了小黑...

來(lái)源: 責(zé)編: 時(shí)間:2024-01-19 09:16:51 236觀看
導(dǎo)讀小黑有點(diǎn)困,他想休息,又怕耽誤時(shí)間,于是準(zhǔn)備小瞇一會(huì)。為了能按時(shí)起來(lái),他設(shè)了鬧鐘,作為程序員,必須得整兩個(gè),防止單點(diǎn)故障。當(dāng)任意一個(gè)鬧鐘響起,小黑就起來(lái)把兩個(gè)鬧鐘都關(guān)掉,繼續(xù)干活,就像這樣:public class Clock { private

小黑有點(diǎn)困,他想休息,又怕耽誤時(shí)間,于是準(zhǔn)備小瞇一會(huì)。wUH28資訊網(wǎng)——每日最新資訊28at.com

為了能按時(shí)起來(lái),他設(shè)了鬧鐘,作為程序員,必須得整兩個(gè),防止單點(diǎn)故障。wUH28資訊網(wǎng)——每日最新資訊28at.com

當(dāng)任意一個(gè)鬧鐘響起,小黑就起來(lái)把兩個(gè)鬧鐘都關(guān)掉,繼續(xù)干活,就像這樣:wUH28資訊網(wǎng)——每日最新資訊28at.com

public class Clock {    private BlackBro blackBro;    public void setBlackBro(BlackBro blackBro) {        this.blackBro = blackBro;    }    public synchronized void ring() {        System.out.println(Thread.currentThread() + " Clock.ring...");        blackBro.wake();    }    public synchronized void close() {        System.out.println(Thread.currentThread() + " Clock.close...");    }}
public class BlackBro {    private Clock[] clocks;    public void setClocks(Clock[] clocks) {        this.clocks = clocks;    }    public synchronized void wake() {        System.out.println(Thread.currentThread() + "BlackBro.wake...");        for (Clock clock : clocks) {            clock.close();        }    }}

為了防止鬧鐘和小黑在執(zhí)行操作期間被人打擾,我貼心地給他們都加上了鎖 —— synchronized。wUH28資訊網(wǎng)——每日最新資訊28at.com

模擬這個(gè)場(chǎng)景將是這樣:wUH28資訊網(wǎng)——每日最新資訊28at.com

public static void main(String[] args) {    Clock clock1 = new Clock();    Clock clock2 = new Clock();    BlackBro blackBro = new BlackBro();    clock1.setBlackBro(blackBro);    clock2.setBlackBro(blackBro);    blackBro.setClocks(new Clock[]{clock1, clock2});    // sleep...    Thread t1 = new Thread(clock1::ring);    Thread t2 = new Thread(clock2::ring);    t1.start();    t2.start();}

啟動(dòng)程序發(fā)現(xiàn),陷入了無(wú)盡地等待:wUH28資訊網(wǎng)——每日最新資訊28at.com

Thread[Thread-0,5,main] Clock.ring...Thread[Thread-1,5,main] Clock.ring...Thread[Thread-1,5,main]BlackBro.wake...

這是怎么回事?眼尖的同學(xué)肯定發(fā)現(xiàn)問(wèn)題了。我們看一下 jstack:wUH28資訊網(wǎng)——每日最新資訊28at.com

Found one Java-level deadlock:============================="Thread-0":  waiting to lock monitor 0x0000600003ecc000 (object 0x000000070fc52398, a com.demo.BlackBro),  which is held by "Thread-1""Thread-1":  waiting to lock monitor 0x0000600003ec04e0 (object 0x000000070fc50f88, a com.demo.Clock),  which is held by "Thread-0"Java stack information for the threads listed above:===================================================

原來(lái)是死鎖了:我們起了兩個(gè)鬧鐘線程,兩個(gè)線程各自拿到自己的對(duì)象鎖,開(kāi)始 ring,ring 又都會(huì)去喚醒小黑,但小黑對(duì)象只有一個(gè),只有一個(gè)鬧鐘能順利拿到小黑的對(duì)象鎖,小黑被喚醒后又去關(guān)鬧鐘,但卻沒(méi)法關(guān)掉,因?yàn)轸[鐘在等小黑喚醒的期間不會(huì)被別人打斷,于是鬧鐘在等小黑,小黑在等鬧鐘,形成了死鎖。wUH28資訊網(wǎng)——每日最新資訊28at.com

我相信稍微仔細(xì)點(diǎn)大家都能發(fā)現(xiàn)這個(gè)問(wèn)題,這是因?yàn)槲野迅蓴_項(xiàng)都排除,只留下非常簡(jiǎn)單的框架。如果在一個(gè)非常復(fù)雜的系統(tǒng)中,還是很難發(fā)現(xiàn)的。這也是我今天遇到的一個(gè)線上問(wèn)題,花了半天時(shí)間才排查出來(lái)。wUH28資訊網(wǎng)——每日最新資訊28at.com

這個(gè) case 教育我們要謹(jǐn)慎使用鎖,尤其是 synchronized;其次如果發(fā)現(xiàn)程序沒(méi)有按預(yù)期地執(zhí)行,尤其是該執(zhí)行的沒(méi)執(zhí)行,可以留個(gè)心眼,看看堆棧是不是有死鎖。wUH28資訊網(wǎng)——每日最新資訊28at.com

2024 年第一個(gè)小case送給你,你學(xué)廢了嗎?wUH28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-64969-0.html為了讓小白也能看懂這個(gè)死鎖Case,我請(qǐng)來(lái)了小黑...

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: Java死鎖,你學(xué)會(huì)了嗎?

下一篇: 分享六個(gè)實(shí)用的 JS 小技巧,讓你的代碼顯得更專業(yè)些

標(biāo)簽:
  • 熱門(mén)焦點(diǎn)
  • 掘力計(jì)劃第 20 期:Flutter 混合開(kāi)發(fā)的混亂之治

    在掘力計(jì)劃系列活動(dòng)第20場(chǎng),《Flutter 開(kāi)發(fā)實(shí)戰(zhàn)詳解》作者,掘金優(yōu)秀作者,Github GSY 系列目負(fù)責(zé)人戀貓的小郭分享了Flutter 混合開(kāi)發(fā)的混亂之治。Flutter 基于自研的 Skia 引擎
  • 這款新興工具平臺(tái),讓你的電腦效率翻倍

    隨著信息技術(shù)的發(fā)展,我們獲取信息的渠道越來(lái)越多,但是處理信息的效率卻成為一個(gè)瓶頸。于是各種工具應(yīng)運(yùn)而生,都在爭(zhēng)相解決我們的工作效率問(wèn)題。今天我要給大家介紹一款效率
  • 得物寵物生意「狂飆」,發(fā)力“它經(jīng)濟(jì)”

    作者|花花小萌主近日,得物宣布正式上線寵物鑒別,通過(guò)得物App內(nèi)的“在線鑒別”,可找到鑒別寵物的選項(xiàng)。通過(guò)上傳自家寵物的部位細(xì)節(jié),就能收獲擁有專業(yè)資質(zhì)認(rèn)證的得物鑒
  • 當(dāng)家的盒馬,加速謀生

    來(lái)源 | 價(jià)值星球Planet作者 | 歸去來(lái)自己“當(dāng)家”的盒馬,開(kāi)始加速謀生了。據(jù)盒馬官微消息,盒馬計(jì)劃今年開(kāi)放生鮮供應(yīng)鏈,將其生鮮商品送往食堂。目前,盒馬在上海已經(jīng)與
  • 阿里大調(diào)整

    來(lái)源:產(chǎn)品劉有媒體報(bào)道稱,近期淘寶天貓集團(tuán)啟動(dòng)了近年來(lái)最大的人力制度改革,涉及員工績(jī)效、層級(jí)體系等多個(gè)核心事項(xiàng),目前已形成一個(gè)初步的“征求意見(jiàn)版”:1、取消P序列
  • 華為Mate 60系列用上可變靈動(dòng)島:正式版體驗(yàn)將會(huì)更出色

    這段時(shí)間以來(lái),關(guān)于華為新旗艦的爆料日漸密集。據(jù)此前多方爆料,今年華為將開(kāi)始恢復(fù)一年雙旗艦戰(zhàn)略,除上半年推出的P60系列外,往年下半年的Mate系列也將
  • 機(jī)構(gòu)稱Q2國(guó)內(nèi)智能手機(jī)銷(xiāo)量同比下滑4% vivo份額重回第1

    7月29日消息,根據(jù)市場(chǎng)調(diào)查機(jī)構(gòu)Counterpoint Research公布的最新報(bào)告,2023年第2季度中國(guó)智能手機(jī)銷(xiāo)量同比下降4%,創(chuàng)新自2014年以來(lái)第2季度銷(xiāo)量新低。報(bào)
  • AI芯片初創(chuàng)公司Tenstorrent獲三星和現(xiàn)代1億美元投資

    Tenstorrent是一家由芯片行業(yè)資深人士Jim Keller領(lǐng)導(dǎo)的加拿大初創(chuàng)公司,專注于開(kāi)發(fā)人工智能芯片,該公司周三表示,已經(jīng)從現(xiàn)代汽車(chē)集團(tuán)和三星投資基金等
  • OPPO K11搭載長(zhǎng)壽版100W超級(jí)閃充:26分鐘充滿100%

    據(jù)此前官方宣布,OPPO將于7月25日也就是今天下午14:30舉辦新品發(fā)布會(huì),屆時(shí)全新的OPPO K11將正式與大家見(jiàn)面,將主打旗艦影像,和同檔位競(jìng)品相比,其最大的賣(mài)
Top 主站蜘蛛池模板: 绥棱县| 衡山县| 永仁县| 全椒县| 岑巩县| 临城县| 林西县| 泾川县| 迁西县| 巴东县| 正安县| 黑水县| 伊吾县| 泾川县| 澎湖县| 子长县| 克什克腾旗| 丽江市| 且末县| 固镇县| 吴旗县| 慈利县| 蒙城县| 诸城市| 龙山县| 慈利县| 南部县| 长汀县| 宽甸| 怀仁县| 靖宇县| 邹城市| 济阳县| 祥云县| 天祝| 高州市| 工布江达县| 凤冈县| 莲花县| 邯郸县| 山东|