一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Java中高級(jí)面試題(5)

 太極混元天尊 2018-05-27


什么是線程死鎖?死鎖如何產(chǎn)生?如何避免線程死鎖?


死鎖的介紹:


線程死鎖是指由于兩個(gè)或者多個(gè)線程互相持有對(duì)方所需要的資源,導(dǎo)致這些線程處于等待狀態(tài),無(wú)法前往執(zhí)行。當(dāng)線程進(jìn)入對(duì)象的synchronized代碼塊時(shí),便占有了資源,直到它退出該代碼塊或者調(diào)用wait方法,才釋放資源,在此期間,其他線程將不能進(jìn)入該代碼塊。當(dāng)線程互相持有對(duì)方所需要的資源時(shí),會(huì)互相等待對(duì)方釋放資源,如果線程都不主動(dòng)釋放所占有的資源,將產(chǎn)生死鎖。


死鎖的產(chǎn)生的一些特定條件:


1、互斥條件:進(jìn)程對(duì)于所分配到的資源具有排它性,即一個(gè)資源只能被一個(gè)進(jìn)程占用,直到被該進(jìn)程釋放 。


2、請(qǐng)求和保持條件:一個(gè)進(jìn)程因請(qǐng)求被占用資源而發(fā)生阻塞時(shí),對(duì)已獲得的資源保持不放。 


3、不剝奪條件:任何一個(gè)資源在沒(méi)被該進(jìn)程釋放之前,任何其他進(jìn)程都無(wú)法對(duì)他剝奪占用。


4、循環(huán)等待條件:當(dāng)發(fā)生死鎖時(shí),所等待的進(jìn)程必定會(huì)形成一個(gè)環(huán)路(類似于死循環(huán)),造成永久阻塞。


如何避免:


1、加鎖順序:

當(dāng)多個(gè)線程需要相同的一些鎖,但是按照不同的順序加鎖,死鎖就很容易發(fā)生。如果能確保所有的線程都是按照相同的順序獲得鎖,那么死鎖就不會(huì)發(fā)生。當(dāng)然這種方式需要你事先知道所有可能會(huì)用到的鎖,然而總有些時(shí)候是無(wú)法預(yù)知的。


2、加鎖時(shí)限:

加上一個(gè)超時(shí)時(shí)間,若一個(gè)線程沒(méi)有在給定的時(shí)限內(nèi)成功獲得所有需要的鎖,則會(huì)進(jìn)行回退并釋放所有已經(jīng)獲得的鎖,然后等待一段隨機(jī)的時(shí)間再重試。但是如果有非常多的線程同一時(shí)間去競(jìng)爭(zhēng)同一批資源,就算有超時(shí)和回退機(jī)制,還是可能會(huì)導(dǎo)致這些線程重復(fù)地嘗試但卻始終得不到鎖。


3、死鎖檢測(cè):

死鎖檢測(cè)即每當(dāng)一個(gè)線程獲得了鎖,會(huì)在線程和鎖相關(guān)的數(shù)據(jù)結(jié)構(gòu)中(map、graph等等)將其記下。除此之外,每當(dāng)有線程請(qǐng)求鎖,也需要記錄在這個(gè)數(shù)據(jù)結(jié)構(gòu)中。死鎖檢測(cè)是一個(gè)更好的死鎖預(yù)防機(jī)制,它主要是針對(duì)那些不可能實(shí)現(xiàn)按序加鎖并且鎖超時(shí)也不可行的場(chǎng)景。




notify和notifyAll區(qū)別


他們的作用都是通知處于等待該對(duì)象的線程。


1、notifyAll使所有原來(lái)在該對(duì)象上等待被notify的線程統(tǒng)統(tǒng)退出wait的狀態(tài),變成等待該對(duì)象上的鎖,一旦該對(duì)象被解鎖,他們就會(huì)去競(jìng)爭(zhēng)。


2、notify是通知其中一個(gè)線程,不會(huì)通知所有的線程。




談一談對(duì)MySQL InnoDB的認(rèn)識(shí)


介紹:


InnoDB引擎是MySQL數(shù)據(jù)庫(kù)的一個(gè)重要的存儲(chǔ)引擎,和其他存儲(chǔ)引擎相比,InnoDB引擎的優(yōu)點(diǎn)是支持兼容ACID的事務(wù)(類似于PostgreSQL),以及參數(shù)完整性(有外鍵)等?,F(xiàn)在Innobase實(shí)行雙認(rèn)證授權(quán).MySQL5.5.5以后默認(rèn)的存儲(chǔ)引擎都是InnoDB引擎。


特點(diǎn)是:


1、具有較好的事務(wù)支持:支持4個(gè)事務(wù)隔離級(jí)別,支持多版本讀

2、行級(jí)鎖定:通過(guò)索引實(shí)現(xiàn),全表掃描仍然會(huì)是表鎖,注意間隙鎖的影響

3、讀寫阻塞與事務(wù)隔離級(jí)別相關(guān)

4、具有非常高效的緩存特性:能緩存索引,也能緩存數(shù)據(jù)

5、整個(gè)表和主鍵以Cluster方式存儲(chǔ),組成一顆平衡樹

6、所有Secondary Index都會(huì)保存主鍵信息


適用場(chǎng)景:


1、需要事務(wù)支持(具有較好的事務(wù)特性)

2、行級(jí)鎖定對(duì)高并發(fā)有很好的適應(yīng)能力,但需要確保查詢是通過(guò)索引完成

3、數(shù)據(jù)更新較為頻繁的場(chǎng)景

4、數(shù)據(jù)一致性要求較高

5、硬件設(shè)備內(nèi)存較大,可以利用InnoDB較好的緩存能力來(lái)提高內(nèi)存利用率,盡可能減少磁盤IO




談一談數(shù)據(jù)庫(kù)事務(wù)的隔離級(jí)別?


1、Read uncommitted(讀未提交)就是一個(gè)事務(wù)可以讀取另一個(gè)未提交事務(wù)的數(shù)據(jù)。


2、Read committed(讀提交)就是一個(gè)事務(wù)要等另一個(gè)事務(wù)提交后才能讀取數(shù)據(jù)。


3、Repeatable read(重復(fù)讀)就是在開始讀取數(shù)據(jù)(事務(wù)開啟)時(shí),不再允許修改操作。


4、Serializable(序列化)在該級(jí)別下,事務(wù)串行化順序執(zhí)行,可以避免臟讀、不可重復(fù)讀與幻讀。是最高的事務(wù)隔離級(jí)別,但是這種事務(wù)隔離級(jí)別效率低下,比較耗數(shù)據(jù)庫(kù)性能,一般不使用。


事務(wù)的作用就是保證數(shù)據(jù)的一致性、完整性。事務(wù)隔離級(jí)別越高,在并發(fā)下會(huì)產(chǎn)生的問(wèn)題就越少,但同時(shí)付出的性能消耗也將越大,因此很多時(shí)候必須在并發(fā)性和性能之間做一個(gè)權(quán)衡。所以設(shè)立了幾種事務(wù)隔離級(jí)別,以便讓不同的項(xiàng)目可以根據(jù)自己項(xiàng)目的并發(fā)情況選擇合適的事務(wù)隔離級(jí)別,對(duì)于在事務(wù)隔離級(jí)別之外會(huì)產(chǎn)生的并發(fā)問(wèn)題,在代碼中做補(bǔ)償。


    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    国产精品成人又粗又长又爽| 亚洲一区二区三区国产| 亚洲内射人妻一区二区| 国产成人一区二区三区久久| 欧美日韩乱一区二区三区| 五月综合激情婷婷丁香| 欧美在线观看视频三区| 国产一区二区三区丝袜不卡| 爱草草在线观看免费视频| 日本理论片午夜在线观看| 在线日韩中文字幕一区 | 日韩欧美综合中文字幕| 伊人久久青草地婷婷综合| 国产精品久久女同磨豆腐| 日本av在线不卡一区| 免费特黄欧美亚洲黄片| 欧美日韩国产欧美日韩| 亚洲av熟女国产一区二区三区站| 日韩欧美中文字幕av| 亚洲欧美日本视频一区二区| 国产免费自拍黄片免费看| 国产成人综合亚洲欧美日韩| 高清不卡视频在线观看| 亚洲熟女少妇精品一区二区三区| 日本人妻精品中文字幕不卡乱码| 九九热视频经典在线观看| 国产一区欧美午夜福利| 久久精品视频就在久久| 亚洲av又爽又色又色| 91麻豆精品欧美一区| 精品熟女少妇一区二区三区| 熟妇久久人妻中文字幕| 国产亚洲二区精品美女久久| 日本免费一级黄色录像 | 一区二区在线激情视频| 亚洲中文字幕在线视频频道| 欧美日韩国产成人高潮| 亚洲欧洲一区二区中文字幕| 国产男女激情在线视频| 亚洲国产精品av在线观看| 亚洲欧美视频欧美视频|