多線程關(guān)鍵字Synchronized

Synchronized的基本使用

原文鏈接:https://www.cnblogs.com/paddix/p/5367116.html
Synchronized是Java中解決并發(fā)問題的一種最常用的方法,也是最簡(jiǎn)單的一種方法。Synchronized的作用主要有三個(gè):(1)確保線程互斥的訪問同步代碼(2)保證共享變量的修改能夠及時(shí)可見(3)有效解決重排序問題。從語法上講,Synchronized總共有三種用法:

(1)修飾普通方法

(2)修飾靜態(tài)方法

(3)修飾代碼塊

接下來我就通過幾個(gè)例子程序來說明一下這三種使用方式(為了便于比較,三段代碼除了Synchronized的使用方式不同以外,其他基本保持一致)。

運(yùn)行結(jié)果分析

1、代碼段2結(jié)果:

雖然method1和method2是不同的方法,但是這兩個(gè)方法都進(jìn)行了同步,并且是通過同一個(gè)對(duì)象去調(diào)用的,所以調(diào)用之前都需要先去競(jìng)爭(zhēng)同一個(gè)對(duì)象上的鎖(monitor),也就只能互斥的獲取到鎖,因此,method1和method2只能順序的執(zhí)行。

2、代碼段3結(jié)果:

雖然test和test2屬于不同對(duì)象,但是test和test2屬于同一個(gè)類的不同實(shí)例,由于method1和method2都屬于靜態(tài)同步方法,所以調(diào)用的時(shí)候需要獲取同一個(gè)類上monitor(每個(gè)類只對(duì)應(yīng)一個(gè)class對(duì)象),所以也只能順序的執(zhí)行。

3、代碼段4結(jié)果:

對(duì)于代碼塊的同步實(shí)質(zhì)上需要獲取Synchronized關(guān)鍵字后面括號(hào)中對(duì)象的monitor,由于這段代碼中括號(hào)的內(nèi)容都是this,而method1和method2又是通過同一的對(duì)象去調(diào)用的,所以進(jìn)入同步塊之前需要去競(jìng)爭(zhēng)同一個(gè)對(duì)象上的鎖,因此只能順序執(zhí)行同步塊。

?著作權(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)容