Android 中 synchronized的基本使用

應(yīng)用情況:多線程同時(shí)訪問,并且代碼塊不能被同時(shí)執(zhí)行的時(shí)候使用


使用synchronized用來修飾方法

基本執(zhí)行過程:當(dāng)多個(gè)線程同時(shí)訪問被synchronized修飾的方法的時(shí)候,有且只有一個(gè)線程可以訪問,當(dāng)一個(gè)線程在訪問的時(shí)候,其他線程只能等待。當(dāng)一個(gè)線程訪問完畢后下一個(gè)線程才可以訪問。

原理解析:當(dāng)方法被synchronized修飾后,如果想要執(zhí)行該方法就必須獲得相應(yīng)的鎖。

?鎖的說明:每個(gè)類又且僅有一個(gè)鎖(針對(duì)靜態(tài)方法),每個(gè)類的示例也是有且僅有一個(gè)鎖。

當(dāng)多個(gè)線程在同時(shí)訪問同一個(gè)方法的時(shí)候,執(zhí)行該方法就必須獲得相應(yīng)的鎖,同時(shí)鎖只有一個(gè),所以只能有一個(gè)線程可以獲得鎖,所以只有一個(gè)線程可以執(zhí)行,當(dāng)方法執(zhí)行完畢,線程會(huì)釋放鎖,其他線程獲取該鎖,執(zhí)行方法。

進(jìn)階說明:由于每個(gè)類只有一個(gè)鎖,所以當(dāng)一個(gè)類中又多個(gè)方法被synchronized修飾的時(shí)候,在同一時(shí)間內(nèi)只有一個(gè)方法可以獲得鎖,所以只有一個(gè)方法可以執(zhí)行。


原理說明進(jìn)行測(cè)試驗(yàn)證:(生物實(shí)驗(yàn)有個(gè)唯一變量原則,本次也采用這個(gè)原則)

驗(yàn)證多線程同時(shí)訪問被synchronized修飾的方法,方法順序執(zhí)行結(jié)果:

1.當(dāng)多線程調(diào)用方法的時(shí)候,方法沒有被synchronized修飾的時(shí)候的執(zhí)行結(jié)果


線程啟動(dòng)
調(diào)用方法



打印結(jié)果

根據(jù)打印結(jié)果可以看出兩個(gè)線程調(diào)用的方法的時(shí)候,方法會(huì)被同時(shí)執(zhí)行。

當(dāng)我們僅僅為shwoDO()添加一個(gè)修飾關(guān)鍵字synchronized的時(shí)候,方法就會(huì)被順序調(diào)用。結(jié)果如下:


更改后的方法



打印結(jié)果




使用synchronized用來修飾代碼塊

? ? ?基本說明:當(dāng)synchronized在修飾代碼塊的時(shí)候需要一個(gè)自定義鎖,當(dāng)在多線程訪問,代碼塊的時(shí)候,只要獲得自定義鎖就可以執(zhí)行。

? ? ? 自定義鎖:可以是一個(gè)類,也可以是一個(gè)實(shí)例(可以是Objcet的子類,也可以是當(dāng)前類自己(this)),當(dāng)具有相同自定鎖的時(shí)候,代碼塊會(huì)順去執(zhí)行,當(dāng)鎖不同的時(shí)候互相不影響。

? ? 每個(gè)類又且僅有一個(gè)鎖(針對(duì)靜態(tài)方法),每個(gè)類的示例也是有且僅有一個(gè)鎖。

? ? ?基本書寫格式:synchronized(自定義鎖){同步執(zhí)行代碼塊}



測(cè)試將showDO()方法個(gè)能改為如圖,代碼塊內(nèi)部?jī)?nèi)容同樣會(huì)同步執(zhí)行。


更改后方法



打印結(jié)果

總結(jié)說明:synchronized具有有兩種使用方法,第一種是修飾方法,第二種修飾代碼塊。

? ? ? ? ? ? ? ? ?無論那中方法,被修飾的內(nèi)容都會(huì)同步執(zhí)行。這也是synchronized的作用。

? ? ? ? ? ? ? ? ?關(guān)于兩種方法的使用:對(duì)于修飾方法常常會(huì)發(fā)生不必要的代碼塊被同步,同時(shí)鎖不可以選擇,但是使用 ? ? ? ? ? ? ? ? ? 簡(jiǎn)單。對(duì)于修飾代碼塊方法用起來更精確,需要自己制定鎖,用起來稍微麻煩一點(diǎn)。



若有錯(cuò)誤之初,請(qǐng)給予指示,謝謝~~~~~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容