最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于synchronized修飾靜態(tài)和非靜態(tài)方法

 更新時(shí)間:2020年04月16日 14:33:04   作者:經(jīng)典雞翅  
這篇文章主要介紹了基于synchronized修飾靜態(tài)和非靜態(tài)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

前言

最近被問到了這個(gè)問題,第一次回答的也是很不好,在此參考網(wǎng)上答案進(jìn)行整理記錄。供大家學(xué)習(xí)參考。

Synchronized修飾非靜態(tài)方法

Synchronized修飾非靜態(tài)方法,實(shí)際上是對(duì)調(diào)用該方法的對(duì)象加鎖,俗稱“對(duì)象鎖”。

Java中每個(gè)對(duì)象都有一個(gè)鎖,并且是唯一的。假設(shè)分配的一個(gè)對(duì)象空間,里面有多個(gè)方法,相當(dāng)于空間里面有多個(gè)小房間,如果我們把所有的小房間都加鎖,因?yàn)檫@個(gè)對(duì)象只有一把鑰匙,因此同一時(shí)間只能有一個(gè)人打開一個(gè)小房間,然后用完了還回去,再由JVM 去分配下一個(gè)獲得鑰匙的人。

情況1:同一個(gè)對(duì)象在兩個(gè)線程中分別訪問該對(duì)象的兩個(gè)同步方法

結(jié)果:會(huì)產(chǎn)生互斥。

解釋:因?yàn)殒i針對(duì)的是對(duì)象,當(dāng)對(duì)象調(diào)用一個(gè)synchronized方法時(shí),其他同步方法需要等待其執(zhí)行結(jié)束并釋放鎖后才能執(zhí)行。正如上面所解釋的,相當(dāng)于一個(gè)對(duì)象只有一把鑰匙了,里面的兩個(gè)同步方法是兩個(gè)房間,因此,同一時(shí)間只能用一個(gè)鑰匙訪問一個(gè)方法。

情況2:不同對(duì)象在兩個(gè)線程中調(diào)用同一個(gè)同步方法

結(jié)果:不會(huì)產(chǎn)生互斥。

解釋:因?yàn)槭莾蓚€(gè)對(duì)象,就相當(dāng)于兩個(gè)大房子,彼此之間互不干擾,具有兩把鑰匙。鎖針對(duì)的是對(duì)象,并不是方法,所以可以并發(fā)執(zhí)行,不會(huì)互斥。形象的來說就是因?yàn)槲覀兠總€(gè)線程在調(diào)用方法的時(shí)候都是new 一個(gè)對(duì)象,那么就會(huì)出現(xiàn)兩個(gè)空間,兩把鑰匙。

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

Synchronized修飾靜態(tài)方法,實(shí)際上是對(duì)該類對(duì)象加鎖,俗稱“類鎖”。

情況1:用類直接在兩個(gè)線程中調(diào)用兩個(gè)不同的同步方法

結(jié)果:會(huì)產(chǎn)生互斥。

解釋:因?yàn)閷?duì)靜態(tài)對(duì)象加鎖實(shí)際上對(duì)類(.class)加鎖,類對(duì)象只有一個(gè),可以理解為任何時(shí)候都只有一個(gè)空間,里面有N個(gè)房間,一把鎖,因此房間(同步方法)之間一定是互斥的。

注:上述情況和用單例模式聲明一個(gè)對(duì)象來調(diào)用非靜態(tài)方法的情況是一樣的,因?yàn)橛肋h(yuǎn)就只有這一個(gè)對(duì)象。所以訪問同步方法之間一定是互斥的。

情況2:用一個(gè)類的靜態(tài)對(duì)象在兩個(gè)線程中調(diào)用靜態(tài)方法或非靜態(tài)方法

結(jié)果:會(huì)產(chǎn)生互斥。

解釋:因?yàn)槭且粋€(gè)對(duì)象調(diào)用,同上。都調(diào)用靜態(tài)方法的時(shí)候,相當(dāng)于是同一個(gè)類鎖,用的都是同一個(gè)類對(duì)象。

都調(diào)用非靜態(tài)方法的時(shí)候,相當(dāng)于是同一個(gè)對(duì)象鎖。

情況3:一個(gè)對(duì)象在兩個(gè)線程中分別調(diào)用一個(gè)靜態(tài)同步方法和一個(gè)非靜態(tài)同步方法

結(jié)果:不會(huì)產(chǎn)生互斥。

解釋:因?yàn)殡m然是一個(gè)對(duì)象調(diào)用,但是兩個(gè)方法的鎖類型不同,調(diào)用的靜態(tài)方法實(shí)際上是類對(duì)象在調(diào)用,即這兩個(gè)方法產(chǎn)生的并不是同一個(gè)對(duì)象鎖,因此不會(huì)互斥,會(huì)并發(fā)執(zhí)行。

例子

pulbic class Something(){
  public synchronized void isSyncA(){}
  public synchronized void isSyncB(){}
  public static synchronized void cSyncA(){}
  public static synchronized void cSyncB(){}
}

那么,加入有Something類的兩個(gè)實(shí)例a與b,那么下列哪組方法可以被1個(gè)以上線程同時(shí)訪問呢?

a. x.isSyncA()與 x.isSyncB()
b. x.isSyncA()與 y.isSyncA()
c. x.cSyncA()與 y.cSyncB()
d. x.isSyncA()與 Something.cSyncA()

這里,很清楚的可以判斷:

a,都是對(duì)同一個(gè)實(shí)例的synchronized域訪問,因此不能被同時(shí)訪問

b,是針對(duì)不同實(shí)例的,因此可以同時(shí)被訪問

c,因?yàn)槭莝tatic synchronized,所以不同實(shí)例之間不會(huì)被限制

d,書上的答案是可以被同時(shí)訪問的,答案理由是synchronzied的是實(shí)例方法與synchronzied的類方法由于鎖定(lock)不同的原因。

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringBoot異步任務(wù)實(shí)現(xiàn)下單校驗(yàn)庫存的項(xiàng)目實(shí)踐

    SpringBoot異步任務(wù)實(shí)現(xiàn)下單校驗(yàn)庫存的項(xiàng)目實(shí)踐

    在開發(fā)中,異步任務(wù)應(yīng)用的場景非常的廣泛,本文主要介紹了SpringBoot異步任務(wù)實(shí)現(xiàn)下單校驗(yàn)庫存的項(xiàng)目實(shí)踐,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-09-09
  • java的幾種定時(shí)器的具體使用(4種)

    java的幾種定時(shí)器的具體使用(4種)

    本文主要介紹了4種類型的定時(shí)器:@Scheduled注解、quartz、new Timer().schedule、使用線程控制的具體使用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2021-09-09
  • java內(nèi)部類的那些事兒_讓你一看就弄明白

    java內(nèi)部類的那些事兒_讓你一看就弄明白

    本篇文章介紹了,java內(nèi)部類的那些事兒。需要的朋友參考下
    2013-05-05
  • 詳細(xì)聊聊RabbitMQ竟無法反序列化List問題

    詳細(xì)聊聊RabbitMQ竟無法反序列化List問題

    這篇文章主要給大家介紹了關(guān)于RabbitMQ竟無法反序列化List的相關(guān)資料,文中通過示例代碼將問題以及解決的過程介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2021-09-09
  • 解決RestTemplate反序列化嵌套對(duì)象的問題

    解決RestTemplate反序列化嵌套對(duì)象的問題

    這篇文章主要介紹了解決RestTemplate反序列化嵌套對(duì)象的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Java中的==使用方法詳解

    Java中的==使用方法詳解

    這篇文章主要給大家介紹了關(guān)于Java中的==使用方法的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-09-09
  • MyBatis全局映射文件實(shí)現(xiàn)原理解析

    MyBatis全局映射文件實(shí)現(xiàn)原理解析

    這篇文章主要介紹了MyBatis全局映射文件實(shí)現(xiàn)原理解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • Spring Boot 中該如何防御計(jì)時(shí)攻擊

    Spring Boot 中該如何防御計(jì)時(shí)攻擊

    這篇文章主要介紹了Spring Boot 中該如何防御計(jì)時(shí)攻擊,幫助大家更好的使用spring boot框架,感興趣的朋友可以了解下
    2020-09-09
  • Spring筆記-@Order注解和Ordered接口解析

    Spring筆記-@Order注解和Ordered接口解析

    這篇文章主要介紹了Spring筆記-@Order注解和Ordered接口,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • java如何獲取用戶登錄ip、瀏覽器信息、SessionId

    java如何獲取用戶登錄ip、瀏覽器信息、SessionId

    這篇文章主要介紹了java如何獲取用戶登錄ip、瀏覽器信息、SessionId,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11

最新評(píng)論

宁乡县| 即墨市| 道孚县| 常德市| 连江县| 清新县| 宝山区| 阜阳市| 扎囊县| 安阳县| 会东县| 昌乐县| 庆云县| 丹棱县| 定兴县| 苏州市| 尚志市| 祁阳县| 壶关县| 山东省| 安泽县| 宁武县| 平陆县| 敖汉旗| 清涧县| 道真| 金湖县| 南皮县| 和静县| 民勤县| 洛隆县| 子长县| 巴中市| 瑞昌市| 临西县| 高州市| 元氏县| 米林县| 平阴县| 宁陕县| 桦南县|