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

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

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

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

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

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


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


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

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

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

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

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

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

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

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

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

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

相關(guān)文章

  • IDEA使用maven創(chuàng)建hibernate項目的實現(xiàn)步驟(圖文)

    IDEA使用maven創(chuàng)建hibernate項目的實現(xiàn)步驟(圖文)

    本文主要介紹了IDEA使用maven創(chuàng)建hibernate項目的實現(xiàn)步驟,包括創(chuàng)建Maven項目,配置Hibernate,以及創(chuàng)建實體類映射到數(shù)據(jù)庫等步驟,具有一定的參考價值,感興趣的可以了解一下
    2023-08-08
  • Java多線程:生產(chǎn)者與消費者案例

    Java多線程:生產(chǎn)者與消費者案例

    這篇文章主要介紹了Java并發(fā)編程中的生產(chǎn)者與消費者模型簡述,多線程并發(fā)是Java編程中最終要的部分之一,需要的朋友可以參考下,希望能給你帶來幫助
    2021-07-07
  • mybatis連接數(shù)據(jù)庫實現(xiàn)雙表查詢

    mybatis連接數(shù)據(jù)庫實現(xiàn)雙表查詢

    本文主要介紹了mybatis連接數(shù)據(jù)庫實現(xiàn)雙表查詢,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-09-09
  • Java設(shè)計模式之策略模式案例詳解

    Java設(shè)計模式之策略模式案例詳解

    策略模式(Strategy?Pattern)定義了一組同類型的算法,在不同的類中封裝起來,每種算法可以根據(jù)當(dāng)前場景相互替換,從而使算法的變化獨立于使用它們的客戶端即算法的調(diào)用者
    2022-07-07
  • 解決spring懶加載以及@PostConstruct結(jié)合的坑

    解決spring懶加載以及@PostConstruct結(jié)合的坑

    這篇文章主要介紹了解決spring懶加載以及@PostConstruct結(jié)合的坑,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Java 泛型(Generic)簡介及用法詳解

    Java 泛型(Generic)簡介及用法詳解

    泛型是一種把類型明確的工作推遲到創(chuàng)建對象或者調(diào)用方法的時候才去明確的特殊的類型,參數(shù)化類型,把類型當(dāng)作參數(shù)一樣的傳遞,本文給大家介紹Java 泛型(Generic)概述及使用,感興趣的朋友跟隨小編一起看看吧
    2023-10-10
  • Spring加載加密的配置文件詳解

    Spring加載加密的配置文件詳解

    這篇文章主要為大家詳細(xì)介紹了Spring加載加密的配置文件,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • SpringBoot+MyBatis整合ClickHouse實踐記錄

    SpringBoot+MyBatis整合ClickHouse實踐記錄

    本文介紹了如何使用SpringBoot、MyBatis和ClickHouse整合,包括添加依賴、配置數(shù)據(jù)源、創(chuàng)建實體類、Mapper接口、服務(wù)層和控制器的步驟,通過這些步驟,可以使Java應(yīng)用程序高效地與ClickHouse數(shù)據(jù)庫進行交互,感興趣的朋友跟隨小編一起看看吧
    2024-12-12
  • 通過實例學(xué)習(xí)Either 樹和模式匹配

    通過實例學(xué)習(xí)Either 樹和模式匹配

    這篇文章主要介紹了通過實例學(xué)習(xí)Either 樹和模式匹配,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,,需要的朋友可以參考下
    2019-06-06
  • 詳解Java實現(xiàn)數(shù)據(jù)結(jié)構(gòu)之并查集

    詳解Java實現(xiàn)數(shù)據(jù)結(jié)構(gòu)之并查集

    并查集這種數(shù)據(jù)結(jié)構(gòu),可能出現(xiàn)的頻率不是那么高,但是還會經(jīng)常性的見到,其理解學(xué)習(xí)起來非常容易,通過本文,一定能夠輕輕松松搞定并查集
    2021-06-06

最新評論

庆云县| 伊宁县| 沐川县| 栾城县| 连州市| 石城县| 广昌县| 元谋县| 洛南县| 蓬莱市| 哈密市| 于都县| 舒城县| 资中县| 松原市| 宜城市| 新蔡县| 娱乐| 嘉禾县| 嘉义县| 九江县| 象山县| 隆化县| 绥棱县| 吉首市| 新邵县| 四川省| 桑日县| 五台县| 五家渠市| 文登市| 梅河口市| 昌吉市| 苏州市| 馆陶县| 安龙县| 马边| 贵溪市| 平陆县| 兴业县| 昌邑市|