同步方法中存在鎖嗎?
來源傳智教育2022年06月24日 16時59分54秒
同步代碼塊的鎖是自己定義的任意類型的對象,那么同步方法是否也存在鎖?如果有,它的鎖是什么呢?答案是肯定的,同步方法也有鎖,它的鎖就是當(dāng)前調(diào)用該方法的對象,也就是this指向的對象。這樣做的好處是,同步方法被所有線程所共享,方法所在的對象相對于所有線程來說是唯一的,從而保證了鎖的唯一性。當(dāng)一個線程執(zhí)行該方法時,其他的線程就不能進(jìn)入該方法中,直到這個線程執(zhí)行完該方法為止,從而達(dá)到了線程同步的效果。
有時候需要同步的方法是靜態(tài)方法,靜態(tài)方法不需要創(chuàng)建對象就可以直接用“類名.方法名()”的方式調(diào)用。這時候讀者就會有一個疑問,如果不創(chuàng)建對象,靜態(tài)同步方法的鎖就不會是this,那么靜態(tài)同步方法的鎖是什么?Java中靜態(tài)方法的鎖是該方法所在類的class對象,該對象在裝載該類時自動創(chuàng)建,該對象可以直接用類名,class的方式獲取。
采用同步代碼塊和同步方法解決多線程問題有好處也有弊端。同步解決了多個線程同時訪問共享數(shù)據(jù)時的線程安全問題,只要加上同一個鎖,在同一時間內(nèi)就只能有一個線程被執(zhí)行。但是線程在執(zhí)行同步代碼時每次都會判斷鎖的狀態(tài),非常消耗資源,效率較低。
最新問答
- 2022年06月30日黑盒測試與白盒測試的區(qū)別是啥?
- 2022年06月30日Hive的安裝模式有幾種?
- 2022年06月29日Flume系統(tǒng)要求是什么?
- 2022年06月29日數(shù)據(jù)發(fā)布與訂閱有哪些主要應(yīng)用場景?
- 2022年06月29日Zookeeper集群角色有哪三種?
- 2022年06月29日hadoop1.x和hadoop2.x的區(qū)別是什么,做了哪些改進(jìn)?
- 2022年06月28日znode有哪兩種節(jié)點(diǎn)?
- 2022年06月28日非全新集群選舉的過程是什么樣的?
- 2022年06月28日applicationmaster是什么?
- 2022年06月28日yarn的工作流程是什么?
相關(guān)問答
- 2022年06月02日本科計算機(jī)專業(yè)畢業(yè),想在廣州參加Java培訓(xùn),有什么需要注意的嗎?
- 2022年06月02日廣州java培訓(xùn)價格大概多少?
- 2022年06月02日在廣州想報名一家Java培訓(xùn)機(jī)構(gòu),怎么選擇?
- 2022年06月01日error類和exception類有什么區(qū)別?
- 2022年06月01日Java中的繼承概念是什么?
- 2022年06月01日面向?qū)ο蟮娜筇匦允鞘裁矗?/a>
- 2022年06月01日java中類與對象的關(guān)系是什么
- 2022年05月31日java的數(shù)組排序方法是什么?
- 2022年05月24日Java中二進(jìn)制轉(zhuǎn)十進(jìn)制的方法是什么?
- 2022年05月24日零基礎(chǔ)想學(xué)Java很難嗎?