鍍金池/ 問(wèn)答/Java  Linux  網(wǎng)絡(luò)安全/ 線(xiàn)程A執(zhí)行某對(duì)象的synchronized方法時(shí),其他線(xiàn)程是否可以執(zhí)行該對(duì)象的其

線(xiàn)程A執(zhí)行某對(duì)象的synchronized方法時(shí),其他線(xiàn)程是否可以執(zhí)行該對(duì)象的其他非synchronized方法

如下圖,線(xiàn)程A執(zhí)行obj的synchronized方法的同時(shí),線(xiàn)程B是否可以去執(zhí)行obj的其他非synchronized的方法

clipboard.png

網(wǎng)上看過(guò)幾篇博客,大都說(shuō)可以。但是按我的理解,當(dāng)線(xiàn)程A持有obj的鎖時(shí),線(xiàn)程B想要訪(fǎng)問(wèn)obj,必須阻塞直到獲得對(duì)象鎖才行吧?

回答
編輯回答
別傷我

以下是個(gè)人猜想,如有錯(cuò)誤還請(qǐng)指正!

方法沒(méi)有標(biāo)記 synchronized 時(shí),表示 [調(diào)用此方法時(shí)不需要獲取對(duì)象的鎖],換言之,此調(diào)用與正常調(diào)用一樣,JVM 并不會(huì)做什么特殊處理。

如果標(biāo)記了 synchronized ,表示編寫(xiě)者認(rèn)為該方法有可能造成資源沖突,因此要求此方法被調(diào)用時(shí)嘗試獲取對(duì)象的鎖并一直等待直到獲取成功。

畢竟如果一個(gè)對(duì)象的方法,并不會(huì)對(duì)內(nèi)部的字段屬性或是外部資源產(chǎn)生競(jìng)爭(zhēng)時(shí),它是不是多線(xiàn)程環(huán)境調(diào)用都是無(wú)關(guān)緊要的,因此 JVM 把決定某個(gè)方法是否需要用鎖來(lái)保護(hù)的選擇權(quán)力交給你。

要知道,在 Java 中,方法是單獨(dú)的對(duì)象 Method,因此一個(gè)方法被鎖保護(hù)了,并不意味著它所屬的類(lèi)的某個(gè)對(duì)象實(shí)例被保護(hù),除非你顯式得使用 synchronized 塊去鎖住對(duì)象。

2017年10月29日 00:14
編輯回答
替身

自問(wèn)自答吧!
線(xiàn)程B當(dāng)然可以去執(zhí)行其他非synchronized的方法,因?yàn)椴](méi)有synchronized,所以該線(xiàn)程并不會(huì)請(qǐng)求得到對(duì)象鎖才繼續(xù)執(zhí)行。

2017年3月20日 15:02