2 回答

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超4個(gè)贊
在您的代碼中,clear
并且getItem
是實(shí)例方法。將同步放在實(shí)例方法上意味著線程必須在調(diào)用該方法的對(duì)象實(shí)例上獲取鎖(“內(nèi)在鎖”),然后線程才能開(kāi)始執(zhí)行該方法中的任何代碼。
使實(shí)例方法同步有兩個(gè)效果(來(lái)自java指南):
首先,同一對(duì)象上的同步方法的兩次調(diào)用不可能交錯(cuò)。當(dāng)一個(gè)線程正在為一個(gè)對(duì)象執(zhí)行同步方法時(shí),所有其他為同一對(duì)象調(diào)用同步方法的線程都會(huì)阻塞(暫停執(zhí)行),直到第一個(gè)線程處理完該對(duì)象。
其次,當(dāng)同步方法退出時(shí),它會(huì)自動(dòng)與任何后續(xù)對(duì)同一對(duì)象的同步方法調(diào)用建立起之前的關(guān)系。這保證了對(duì)象狀態(tài)的更改對(duì)所有線程都是可見(jiàn)的。
因此,對(duì)于這兩種方法,您的類(lèi)已經(jīng)是線程安全的。

TA貢獻(xiàn)1794條經(jīng)驗(yàn) 獲得超8個(gè)贊
如果同時(shí)觸發(fā) clear 和 getItem 函數(shù)會(huì)發(fā)生什么?
一個(gè)會(huì)等到另一個(gè)完成。
在這種情況下,我該如何做線程安全的實(shí)例?
它已經(jīng)是線程安全的。
添加回答
舉報(bào)