synchronized

講synchronized關(guān)鍵字時候,就不得不提一下多線程問題同步問題

多線程的同步問題:多個線程同時修改一個數(shù)據(jù)的時候,可能導(dǎo)致的問題 多線程的問題,又叫Concurrency?問題.

Java中提供了同步機制來解決處理資源沖突問題,使用synchronized關(guān)鍵字

同步快:

代碼1

synchronized表示當(dāng)前線程,獨占 對象 someObject,如果有其他線程試圖占有對象someObject,就會等待,直到當(dāng)前線程釋放對someObject的占用。someObject 又叫同步對象,所有的對象,都可以作為同步對象,為了達到同步的效果必須使用同一個同步對象

代碼二

提一下這個someObject,首先它為任意一個對象,而且是各線程共同去占有的,然后當(dāng)多個線程去啟動并占有時,這就引入一個叫標(biāo)志位的東西,每個對象存在一個標(biāo)志位,并具有兩個值0,1,當(dāng)其中一個線程運行到代碼一的同步快時先檢查該對象的標(biāo)志位,若為0狀態(tài),表明該對象有其他線程占有,它會繼續(xù)等待,知道其被釋放,這時該對象標(biāo)志位為1,它會占有這個對象,執(zhí)行同步快中的代碼,并且會把someObject對象標(biāo)志位設(shè)置為0,防止其他線程執(zhí)行。

同步方法:


代碼三

此時只允許該類的一個實例訪問該同步方法,不允許多個線程實例訪問該方法



***? ? ?如果一個類,其方法都是有synchronized修飾的,那么該類就叫做線程安全的類 同一時間,只有一個線程能夠進入?這種類的一個實例?的去修改數(shù)據(jù),進而保證了這個實例中的數(shù)據(jù)的安全(不會同時被多線程修改而變成臟數(shù)據(jù)) 比如StringBuffer和StringBuilder的區(qū)別 StringBuffer的方法都是有synchronized修飾的,StringBuffer就叫做線程安全的類 而StringBuilder就不是線程安全的類?

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

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

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