亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

簡單了解Java synchronized關鍵字同步

 更新時間:2019年09月29日 14:39:19   作者:shemlothae  
這篇文章主要介紹了簡單了解Java synchronized關鍵字同步,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

 synchronized

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

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

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

同步方法

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

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

靜態(tài)同步方法

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

同步塊

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

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Java中Map.entry的具體使用

    Java中Map.entry的具體使用

    Map.Entry?是Map中的一個接口,Map.Entry里有相應的getKey和getValue方法,讓我們能夠從一個項中取出Key和Value,本文就詳細的介紹一下Map.entry的具體使用,感興趣的可以了解一下
    2023-05-05
  • SpringBoot整合aws的示例代碼

    SpringBoot整合aws的示例代碼

    本文通過實例代碼給大家介紹SpringBoot整合aws的全過程,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2021-12-12
  • 詳解Java使用Jsch與sftp服務器實現(xiàn)ssh免密登錄

    詳解Java使用Jsch與sftp服務器實現(xiàn)ssh免密登錄

    這篇文章主要介紹了詳解Java使用Jsch與sftp服務器實現(xiàn)ssh免密登錄,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-10-10
  • 分析java中全面的單例模式多種實現(xiàn)方式

    分析java中全面的單例模式多種實現(xiàn)方式

    單例模式是一種常用的軟件設計模式,單例對象的類只能允許一個實例存在。許多時候整個系統(tǒng)只需要擁有一個的全局對象,有利于協(xié)調系統(tǒng)整體的行為。比如在某個服務器程序中,該服務器的配置信息存放在一個文件中。本文將介紹它的思想和多種實現(xiàn)方式
    2021-06-06
  • java調用通義千問API的詳細完整步驟

    java調用通義千問API的詳細完整步驟

    通義千問是阿里云自主研發(fā)的大語言模型,能夠在用戶自然語言輸入的基礎上,通過自然語言理解和語義分析,理解用戶意圖,在不同領域、任務內為用戶提供服務和幫助,下面這篇文章主要給大家介紹了關于java調用通義千問API的詳細完整步驟,需要的朋友可以參考下
    2024-02-02
  • SpringBoot2.x版本中,使用SpringSession踩的坑及解決

    SpringBoot2.x版本中,使用SpringSession踩的坑及解決

    這篇文章主要介紹了SpringBoot2.x版本中,使用SpringSession踩的坑及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Spring Boot修改內置Tomcat默認端口號的示例

    Spring Boot修改內置Tomcat默認端口號的示例

    本篇文章主要介紹了Spring Boot修改內置Tomcat端口號的示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • 淺談Java list.remove( )方法需要注意的兩個坑

    淺談Java list.remove( )方法需要注意的兩個坑

    這篇文章主要介紹了淺談Java list.remove( )方法需要注意的兩個坑,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • java中List接口與實現(xiàn)類介紹

    java中List接口與實現(xiàn)類介紹

    大家好,本篇文章主要講的是java中List接口與實現(xiàn)類介紹,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • Spring Boot啟動端口修改方法

    Spring Boot啟動端口修改方法

    spring boot是個好東西,可以不用容器直接在main方法中啟動,而且無需配置文件,方便快速搭建環(huán)境。下面通過本文給大家分享Spring Boot修改啟動端口的方法,感興趣的的朋友一起看看吧
    2017-07-07

最新評論