教育行業(yè)A股IPO第一股(股票代碼 003032)

全國(guó)咨詢(xún)/投訴熱線(xiàn):400-618-4000

問(wèn)答>JavaEE>同步方法中存在鎖嗎?

同步方法中存在鎖嗎?

來(lái)源傳智教育2022年06月24日 16時(shí)59分54秒

  同步代碼塊的鎖是自己定義的任意類(lèi)型的對(duì)象,那么同步方法是否也存在鎖?如果有,它的鎖是什么呢?答案是肯定的,同步方法也有鎖,它的鎖就是當(dāng)前調(diào)用該方法的對(duì)象,也就是this指向的對(duì)象。這樣做的好處是,同步方法被所有線(xiàn)程所共享,方法所在的對(duì)象相對(duì)于所有線(xiàn)程來(lái)說(shuō)是唯一的,從而保證了鎖的唯一性。當(dāng)一個(gè)線(xiàn)程執(zhí)行該方法時(shí),其他的線(xiàn)程就不能進(jìn)入該方法中,直到這個(gè)線(xiàn)程執(zhí)行完該方法為止,從而達(dá)到了線(xiàn)程同步的效果。

  有時(shí)候需要同步的方法是靜態(tài)方法,靜態(tài)方法不需要?jiǎng)?chuàng)建對(duì)象就可以直接用“類(lèi)名.方法名()”的方式調(diào)用。這時(shí)候讀者就會(huì)有一個(gè)疑問(wèn),如果不創(chuàng)建對(duì)象,靜態(tài)同步方法的鎖就不會(huì)是this,那么靜態(tài)同步方法的鎖是什么?Java中靜態(tài)方法的鎖是該方法所在類(lèi)的class對(duì)象,該對(duì)象在裝載該類(lèi)時(shí)自動(dòng)創(chuàng)建,該對(duì)象可以直接用類(lèi)名,class的方式獲取。

  采用同步代碼塊和同步方法解決多線(xiàn)程問(wèn)題有好處也有弊端。同步解決了多個(gè)線(xiàn)程同時(shí)訪(fǎng)問(wèn)共享數(shù)據(jù)時(shí)的線(xiàn)程安全問(wèn)題,只要加上同一個(gè)鎖,在同一時(shí)間內(nèi)就只能有一個(gè)線(xiàn)程被執(zhí)行。但是線(xiàn)程在執(zhí)行同步代碼時(shí)每次都會(huì)判斷鎖的狀態(tài),非常消耗資源,效率較低。

和我們?cè)诰€(xiàn)交談!