溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Java中synchronized關(guān)鍵字有什么作用

發(fā)布時間:2021-07-23 16:03:35 來源:億速云 閱讀:219 作者:Leah 欄目:編程語言

Java中synchronized關(guān)鍵字有什么作用,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

synchronized

synchronized可以用來同步塊,同步方法。同步塊可以用來更精確地控制對象鎖,控制鎖的作用域。(鎖的作用域就是從鎖的獲得到鎖的釋放的時間,而且可以選擇獲取哪個對象的鎖)。但是在使用同步塊機(jī)制時,過多的使用鎖也會引發(fā)死鎖問題,同時獲取和釋放也有代價。

而同步方法,它所擁有的就是該類的對象,換句話說,就是this對象,而且鎖的作用域是整個方法,這可能導(dǎo)致鎖的作用域太大,有可能導(dǎo)致死鎖問題。同時也可能包括了不需要同步的代碼塊在內(nèi),也會降低程序的運行效率。

不管是同步方法還是同步塊,我們都不應(yīng)該在里面包含無限循環(huán),不然有可能導(dǎo)致獲得鎖之后,無限循環(huán)下去,無法釋放獲得的鎖資源,從而導(dǎo)致等待鎖的線程無法獲得,出現(xiàn)死鎖問題。

同步方法

非靜態(tài)同步方法

所有的非靜態(tài)同步方法使用的都是同一把鎖----實例對象本身,也就是說一個實例對象的非靜態(tài)方法獲得鎖之后,此對象的其他非靜態(tài)方法必須等待該方法釋放鎖之后才能獲取鎖,而這個類的其他對象可以被獲取,其他對象的非靜態(tài)方法使用的是不同的鎖

靜態(tài)同步方法

所有的靜態(tài)同步方法使用的都是同一把鎖---該類對象本身,這兩把鎖使用的是不同的對象,所以,類的非靜態(tài)方法和靜態(tài)方法之間不存在鎖競爭。但是一個類的靜態(tài)方法之間存在鎖競爭,

同步塊

鎖是可以選擇的,所以只有存在同一把鎖的同步塊才存在鎖競爭,注意!同步塊的鎖是可以選擇的,但不是可以任意選擇的(使用一個引用對象的實例變量不是一個好的選擇,因為同步塊在執(zhí)行過程中,可能會改變它的值,比如設(shè)置為null,而對一個null對象加鎖會發(fā)生異常,并且對不同的對象加鎖也違背了使用鎖的初衷)

同步是基于對象而不是基于引用的,多個變量可以引用一個對象,變量也可以改變引用的對象,因此,我們要根據(jù)實例對象而不是引用來考慮!作為一個原則!永遠(yuǎn)不要對一個可能再同步塊中改變其值的實例變量加鎖?。?!

看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進(jìn)一步的了解或閱讀更多相關(guān)文章,請關(guān)注億速云行業(yè)資訊頻道,感謝您對億速云的支持。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI