欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java基本概念監(jiān)視器實(shí)習(xí)原理解析

 更新時(shí)間:2020年08月28日 16:05:01   作者:程序零世界  
這篇文章主要介紹了Java基本概念監(jiān)視器實(shí)習(xí)原理解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

大學(xué)有一門課程叫操作系統(tǒng),學(xué)習(xí)過的同學(xué)應(yīng)該都記得,監(jiān)視器是操作系統(tǒng)實(shí)現(xiàn)同步的重要基礎(chǔ)概念,同樣它也用在JAVA的線程同步中,這篇文章用一種類推的思想解釋監(jiān)視器”monitor”。

1.什么是監(jiān)視器

監(jiān)視器可以看做是經(jīng)過特殊布置的建筑,這個(gè)建筑有一個(gè)特殊的房間,該房間通常包含一些數(shù)據(jù)和代碼,但是一次只能一個(gè)消費(fèi)者(thread)使用此房間,


當(dāng)一個(gè)消費(fèi)者(線程)使用了這個(gè)房間,首先他必須到一個(gè)大廳(Entry Set)等待,調(diào)度程序?qū)⒒谀承?biāo)準(zhǔn)(e.g. FIFO)將從大廳中選擇一個(gè)消費(fèi)者(線程),進(jìn)入特殊房間,如果這個(gè)線程因?yàn)槟承┰虮弧皰炱稹?,它將被調(diào)度程序安排到“等待房間”,并且一段時(shí)間之后會(huì)被重新分配到特殊房間,按照上面的線路,這個(gè)建筑物包含三個(gè)房間,分別是“特殊房間”、“大廳”以及“等待房間”。


簡(jiǎn)單來(lái)說,監(jiān)視器用來(lái)監(jiān)視線程進(jìn)入這個(gè)特別房間,他確保同一時(shí)間只能有一個(gè)線程可以訪問特殊房間中的數(shù)據(jù)和代碼。

2.JAVA中監(jiān)視器的實(shí)現(xiàn)

在JAVA虛擬機(jī)中,每個(gè)對(duì)象(Object和class)通過某種邏輯關(guān)聯(lián)監(jiān)視器,為了實(shí)現(xiàn)監(jiān)視器的互斥功能,每個(gè)對(duì)象(Object和class)都關(guān)聯(lián)著一個(gè)鎖(有時(shí)也叫“互斥量”),這個(gè)鎖在操作系統(tǒng)書籍中稱為“信號(hào)量”,互斥(“mutex “)是一個(gè)二進(jìn)制的信號(hào)量。

如果一個(gè)線程擁有了某些數(shù)據(jù)的鎖,其他的線程則無(wú)法獲得鎖,直到這個(gè)線程釋放了這個(gè)鎖。在多線程中,如果任何時(shí)候都是我們自己來(lái)寫這個(gè)信號(hào)量,顯然不是很方便,幸運(yùn)的是,JVM為我們自動(dòng)實(shí)現(xiàn)了這些。

為了使數(shù)據(jù)不被多個(gè)線程訪問,java 提供了同步塊 以及 同步方法兩種實(shí)現(xiàn),一旦一段代碼被嵌入到一個(gè)synchronized關(guān)鍵字中,意味著放入了監(jiān)視區(qū)域,JVM在后臺(tái)會(huì)自動(dòng)為這段代碼實(shí)現(xiàn)鎖的功能。

3.JAVA的同步代碼中,哪一部分是監(jiān)視器?

我們知道JAVA每個(gè)對(duì)象(Object/class) 都關(guān)聯(lián)一個(gè)監(jiān)視器,更好的說法應(yīng)該是每個(gè)對(duì)象(Object/class)都有一個(gè)監(jiān)視器,對(duì)象可以有它自己的臨界區(qū),并且能夠監(jiān)視線程序列為了使線程協(xié)作,JAVA為提供了wait()和notifyAll以及notify()實(shí)現(xiàn)掛起線程,并且喚醒另外一個(gè)等待的線程,此外這些方法有三種不同版本:

wait(long timeout, int nanos)
wait(long timeout) notified by other threads or notified by timeout.
notify(all)

這些方法只能在一個(gè)同步塊或同步方法中被調(diào)用,原因是,如果一個(gè)方法不需要相互排斥,不需要監(jiān)測(cè)或線程之間協(xié)作,每一個(gè)線程可以自由訪問此方法,那就不需要協(xié)作。

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

相關(guān)文章

  • 輕松了解java中Caffeine高性能緩存庫(kù)

    輕松了解java中Caffeine高性能緩存庫(kù)

    本文我們將學(xué)習(xí)了解到用于Java的高性能緩存庫(kù)Caffeine,其使用Window TinyLfu清理策略,提供最佳的命中率
    2021-08-08
  • Spring Cache自定義緩存key和過期時(shí)間的實(shí)現(xiàn)代碼

    Spring Cache自定義緩存key和過期時(shí)間的實(shí)現(xiàn)代碼

    使用 Redis的客戶端 Spring Cache時(shí),會(huì)發(fā)現(xiàn)生成 key中會(huì)多出一個(gè)冒號(hào),而且有一個(gè)空節(jié)點(diǎn)的存在,查看源碼可知,這是因?yàn)?nbsp;Spring Cache默認(rèn)生成key的策略就是通過兩個(gè)冒號(hào)來(lái)拼接,本文給大家介紹了Spring Cache自定義緩存key和過期時(shí)間的實(shí)現(xiàn),需要的朋友可以參考下
    2024-05-05
  • response文件流輸出文件名中文不顯示的解決

    response文件流輸出文件名中文不顯示的解決

    這篇文章主要介紹了response文件流輸出文件名中文不顯示的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Java數(shù)據(jù)結(jié)構(gòu)中的HashMap和HashSet詳解

    Java數(shù)據(jù)結(jié)構(gòu)中的HashMap和HashSet詳解

    HashMap和HashSet都是存儲(chǔ)在哈希桶之中,通過本文我們可以先了解一些哈希桶是什么,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2023-10-10
  • elasticsearch索引index之Translog數(shù)據(jù)功能分析

    elasticsearch索引index之Translog數(shù)據(jù)功能分析

    這篇文章主要為大家介紹了elasticsearch索引index之Translog數(shù)據(jù)功能分析,主要分析translog的結(jié)構(gòu)及寫入方式,有需要的朋友可以借鑒參考下
    2022-04-04
  • Prometheus 入門教程之SpringBoot 實(shí)現(xiàn)自定義指標(biāo)監(jiān)控

    Prometheus 入門教程之SpringBoot 實(shí)現(xiàn)自定義指標(biāo)監(jiān)控

    這篇文章主要介紹了Prometheus 入門教程之SpringBoot 實(shí)現(xiàn)自定義指標(biāo)監(jiān)控,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • SpringBoot2.x版本中,使用SpringSession踩的坑及解決

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

    這篇文章主要介紹了SpringBoot2.x版本中,使用SpringSession踩的坑及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • SpringBoot Security前后端分離登錄驗(yàn)證的實(shí)現(xiàn)

    SpringBoot Security前后端分離登錄驗(yàn)證的實(shí)現(xiàn)

    這篇文章主要介紹了SpringBoot Security前后端分離登錄驗(yàn)證的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Java?8?Stream?處理數(shù)據(jù)方法匯總

    Java?8?Stream?處理數(shù)據(jù)方法匯總

    這篇文章主要介紹了Java?8?Stream處理數(shù)據(jù),Stream是Java?8?新引入的一個(gè)包它讓我們能用聲明式的方式處理數(shù)據(jù),Stream流式處理相較于傳統(tǒng)方法簡(jiǎn)潔高效,也便于進(jìn)行并發(fā)編程,更多相關(guān)內(nèi)容需要的小伙伴可以參考下面文章內(nèi)容
    2022-06-06
  • Java通過反射,如何動(dòng)態(tài)修改注解的某個(gè)屬性值

    Java通過反射,如何動(dòng)態(tài)修改注解的某個(gè)屬性值

    這篇文章主要介紹了Java通過反射,動(dòng)態(tài)修改注解的某個(gè)屬性值操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07

最新評(píng)論