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

Java monitor機制使用方法解析

 更新時間:2019年09月29日 14:26:04   作者:shemlothae  
這篇文章主要介紹了Java monitor機制使用方法解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

monitor概念

管程,監(jiān)視器。在操作系統(tǒng)中,存在著semaphore和mutex,即信號量和互斥量,使用基本的mutex進行開發(fā)時,需要小心的使用mutex的down和up操作,否則容易引發(fā)死鎖問題。為了更好的編寫并發(fā)程序,在mutex和semaphore基礎上,提出了更高層次的同步原語,實際上,monitor屬于編程語言的范疇,C語言不支持monitor,而java支持monitor機制。

一個重要特點是,在同一時間,只有一個線程/進程能進入monitor所定義的臨界區(qū),這使得monitor能夠實現(xiàn)互斥的效果。無法進入monitor的臨界區(qū)的進程/線程,應該被阻塞,并且在適當?shù)臅r候被喚醒。顯然,monitor作為一個同步工具,也應該提供這樣管理線程/進程的機制。

monitor這個機制之所以被稱為:更高級的原語,它不可避免的需要對外屏蔽這些機制,并且在內(nèi)部實現(xiàn)這些機制,使得monitor成為一個簡潔易用的借口。

monitor基本元素

  • 臨界區(qū)
  • monitor對象和鎖
  • 條件變量以及定義在monitor對象上的wait,signal操作

使用monitor主要是為了互斥進入臨界區(qū),為了能夠阻塞無法進入臨界區(qū)的進程,線程,需要一個monitor object來協(xié)助,這個object內(nèi)部會有相應的數(shù)據(jù)結構,例如列表,用來保存被阻塞的線程;同時由于monitor機制本質是基于mutex原語的,所以object必須維護一個基于mutex的鎖。

此外,為了在適當?shù)臅r候能夠阻塞和喚醒 進程/線程,還需要引入一個條件變量,這個條件變量用來決定什么時候是“適當?shù)臅r候”,這個條件可以來自程序代碼的邏輯,也可以是在 monitor object 的內(nèi)部,總而言之,程序員對條件變量的定義有很大的自主性。不過,由于 monitor object 內(nèi)部采用了數(shù)據(jù)結構來保存被阻塞的隊列,因此它也必須對外提供兩個 API 來讓線程進入阻塞狀態(tài)以及之后被喚醒,分別是 wait 和 notify。

monitor在java中的實現(xiàn)

臨界區(qū)的圈定

被synchronized關鍵字修飾的方法,代碼塊,就是monitor機制的臨界區(qū)

monitor object

在上述synchronized關鍵字被使用時,往往需要指定一個對象與之關聯(lián),例如synchronized(this),總之,synchronized需要管理一個對象,這個對象就是monitor object。

monitor機制中,monitor 我不檢測題充當著維護mutex和wait, signalAPI來管理線程的阻塞和喚醒。

Java 對象存儲在內(nèi)存中,分別分為三個部分,即對象頭、實例數(shù)據(jù)和對齊填充,而在其對象頭中,保存了鎖標識;同時,java.lang.Object 類定義了 wait(),notify(),notifyAll() 方法,這些方法的具體實現(xiàn),依賴于一個叫 ObjectMonitor 模式的實現(xiàn),這是 JVM 內(nèi)部基于 C++ 實現(xiàn)的一套機制,基本原理如下所示:

當一個線程需要獲取 Object 的鎖時,會被放入 EntrySet 中進行等待,如果該線程獲取到了鎖,成為當前鎖的 owner。如果根據(jù)程序邏輯,一個已經(jīng)獲得了鎖的線程缺少某些外部條件,而無法繼續(xù)進行下去(例如生產(chǎn)者發(fā)現(xiàn)隊列已滿或者消費者發(fā)現(xiàn)隊列為空),那么該線程可以通過調(diào)用 wait 方法將鎖釋放,進入 wait set 中阻塞進行等待,其它線程在這個時候有機會獲得鎖,去干其它的事情,從而使得之前不成立的外部條件成立,這樣先前被阻塞的線程就可以重新進入 EntrySet 去競爭鎖。這個外部條件在 monitor 機制中稱為條件變量。

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

相關文章

  • 實現(xiàn)分布式WebSocket集群的方法

    實現(xiàn)分布式WebSocket集群的方法

    本文總結出了幾個實現(xiàn)分布式WebSocket集群的辦法,從zuul到spring cloud gateway的不同嘗試,總結出了這篇文章,希望能幫助到某些人,并且能一起分享這方面的想法與研究
    2022-03-03
  • java實現(xiàn)文件斷點續(xù)傳下載功能

    java實現(xiàn)文件斷點續(xù)傳下載功能

    這篇文章主要為大家詳細介紹了java實現(xiàn)文件斷點續(xù)傳下載功能的具體代碼,感興趣的小伙伴們可以參考一下
    2016-05-05
  • 通過Java實現(xiàn)中文分詞與文本關鍵詞提取

    通過Java實現(xiàn)中文分詞與文本關鍵詞提取

    這篇文章主要為大家詳細介紹了如何利用Java實現(xiàn)中文分詞以及文本關鍵詞提取功能,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習學習
    2023-06-06
  • java 文件目錄讀寫刪除操作詳細實現(xiàn)代碼

    java 文件目錄讀寫刪除操作詳細實現(xiàn)代碼

    這篇文章主要介紹了java 文件讀寫刪操作詳細實現(xiàn)代碼,需要的朋友可以參考下
    2017-09-09
  • 詳解SpringBoot與SpringCloud的版本對應詳細版

    詳解SpringBoot與SpringCloud的版本對應詳細版

    這篇文章主要介紹了詳解SpringBoot與SpringCloud的版本對應詳細版,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-09-09
  • 如何在Spring中自定義scope的方法示例

    如何在Spring中自定義scope的方法示例

    這篇文章主要介紹了如何在Spring中自定義scope的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-02-02
  • Spring Boot + thymeleaf 實現(xiàn)文件上傳下載功能

    Spring Boot + thymeleaf 實現(xiàn)文件上傳下載功能

    最近同事問我有沒有有關于技術的電子書,我打開電腦上的小書庫,但是郵件發(fā)給他太大了,公司又禁止用文件夾共享,于是花半天時間寫了個小的文件上傳程序,部署在自己的Linux機器上,需要的朋友可以參考下
    2018-01-01
  • 如何在 Linux 上搭建 java 部署環(huán)境(安裝jdk/tomcat/mysql) + 將程序部署到云服務器上的操作)

    如何在 Linux 上搭建 java 部署環(huán)境(安裝jdk/tomcat/mys

    這篇文章主要介紹了如何在 Linux 上搭建 java 部署環(huán)境(安裝jdk/tomcat/mysql) + 將程序部署到云服務器上的操作),本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-01-01
  • Java?spring?boot發(fā)送郵箱實現(xiàn)過程記錄

    Java?spring?boot發(fā)送郵箱實現(xiàn)過程記錄

    我們在?站上注冊賬號的時候?般需要獲取驗證碼,?這個驗證碼?般發(fā)送在你的?機號上還有的是發(fā)送在你的郵箱中,這篇文章主要給大家介紹了關于Java?spring?boot發(fā)送郵箱實現(xiàn)的相關資料,需要的朋友可以參考下
    2024-01-01
  • JAVA實現(xiàn)簡單系統(tǒng)登陸注冊模塊

    JAVA實現(xiàn)簡單系統(tǒng)登陸注冊模塊

    這篇文章主要介紹了一個簡單完整的登陸注冊模塊的實現(xiàn)過程,文章條理清晰,在實現(xiàn)過程中加深了對相關概念的理解,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2015-07-07

最新評論