監視器:Java同步的基本思想

2021-01-08 Java從零開始

如果您上過大學的作業系統課程,您可能還記得監視器是作業系統中同步的重要概念。它也用於Java同步。這篇文章使用類比來解釋「監視器」的基本概念。

1.什麼是監視器?

監視器可以視為包含特殊房間的建築物。特殊房間一次只能容納一個客戶(線程)。房間通常包含一些數據和代碼。

如果客戶要佔用特殊房間,則必須先進入走廊(進入套裝)以等待。調度程序將根據某些條件(例如FIFO)選擇一個。如果由於某種原因他被停職,他將被送往候診室,並安排以後再進入特別室。如上圖所示,該建築物中有3個房間。

簡而言之,監視器是監視線程對特殊房間的訪問的設備。它確保只有一個線程可以訪問受保護的數據或代碼。

2.如何用Java實現?

在Java虛擬機中,每個對象和類在邏輯上都與監視器關聯。為了實現監視器的互斥功能,將一個鎖(有時稱為互斥鎖)與每個對象和類關聯。這在作業系統書籍中稱為信號量,互斥體是二進位信號量。

如果一個線程對某些數據擁有鎖,那麼只有擁有該線程的線程釋放該鎖,其他線程才能獲得該鎖。如果在進行多線程編程時始終需要編寫信號量,那將不方便。幸運的是,由於JVM自動為我們執行了此操作,因此我們不需要這樣做。

為了聲明一個監視區域,這意味著數據不能被多個線程訪問,Java提供了同步語句和同步方法。一旦代碼中嵌入了synced關鍵字,它就是一個監視區域。JVM自動在後臺實現鎖。

3.在Java同步代碼中,監視器是哪一部分?

我們知道每個對象/類都與一個Monitor關聯。我認為可以說每個對象都有一個監視器,因為每個對象可以有自己的關鍵部分,並且能夠監視線程序列。

為了啟用不同線程的協作,Java提供了wait()和notify()來掛起一個線程並喚醒另一個正在對象上等待的線程。此外,還有其他3個版本:

wait(longtimeout, int nanos)

wait(longtimeout) notified by other threads or notified by timeout. notify(all)

這些方法只能在同步語句或同步方法中調用。原因是,如果一個方法不需要相互排斥,則不需要監視線程之間或進行協作,則每個線程都可以自由訪問該方法。

最後,開發這麼多年我也總結了一套學習Java的資料與面試題,如果你在技術上面想提升自己的話,可以關注我,私信發送領取資料或者在評論區留下自己的聯繫方式,有時間記得幫我點下轉發讓跟多的人看到哦。

相關焦點

  • 在線課堂|專業監視器的基本調校
    首先我們可以通過攝像機或專業非編系統給監視器輸入一個SMPTE彩條信號,然後以彩條的信號作為監視器調整參考。
  • JAVA專業術語面試100問
    4、java有哪些基本數據類型?5、數組有沒有length()方法?String有沒有length()方法?數組沒有length()方法,它有length屬性。String有length()方法。17、java中的throw 和 throws關鍵字有什麼區別?18、列舉幾個你了解的幾個常見的運行時異常?19、final, finally, finalize有什麼區別?20、描述Java內存模型?
  • 盤點:非智能java通用版軟體下載TOP5
    下面是國產手機下載排行榜排名前五的手機軟體,都是支持java的通用版軟體綠色無毒,歡迎下載。下面是國產手機下載排行榜排名前五的手機軟體,都是支持java的通用版軟體綠色無毒,歡迎下載。下面是國產手機下載排行榜排名前五的手機軟體,都是支持java的通用版軟體綠色無毒,歡迎下載。
  • java工作需要什麼水平 - CSDN
    前言一份月薪30K的java開發崗位工作要求是怎樣的呢?面試都會問到哪些呢?基本的linux命令你還是要會幾個撒?內存分配、進程、線程調度這些簡單基礎的概念你還是應該有一點撒?別說這些東西沒用,很多時候在實現的時候,很多軟體參考了不少作業系統的設計思想。3、資料庫層面。幾大範式定義概念搞懂。資料庫事務的ACID總能扯明白吧?隔離層級分別保障的力度,和依然存在的問題你得知曉吧?有些都工作幾年的人了,不過分吧?SQL優化搞沒搞過?
  • 跟我學java編程—Java條件運算符
    在D盤Java目錄下,新建「TaxSample.java」文件。用記事本打開「TaxSample.java」文件,輸入以下代碼:代碼結構分析程序功能主要是演示條件運算符的使用。編譯「TaxSample.java」文件,在命令行窗口輸入「javac TaxSample.java」並執行命令,編譯通過後,在命令行窗口輸入「java TaxSample」運行Java程序,命令行窗口顯示如下信息:
  • Go+iris吊打Java+SpringBoot,是Java老了嗎?且慢,Vert.x有話說
    Go+Iris vs Java+SpringBoot 為您揭曉答案那個結果很容易給人一個錯覺:是java老了嗎?當然不是!Java界的性能擔當根本就不是Spring,只是因為國內用java的web框架主要是Spring,我們才拿它來測……本次我們就請出java界的性能擔當——Vert.x,跟Iris再比一次這次的結果會比較有說服力因為iris在官網自稱自己是 the fastest web framework,請注意:它並沒有加任何修飾詞,比如go語言中最快的,而是直說是最快的
  • 萬字概覽 Java 虛擬機
    由於我們在 Heap 上無論是使用「指針碰撞」還是「空閒列表」方法進行內存分配,都會遇到多個線程請求內存分配時的同步問題。TLAB 機制為每一條線程都劃分了一塊私有的內存區域供其分配對象,當一塊 TLAB 被分配滿之後就重新分配一塊,而原來的那塊區域從邏輯上變成了 Heap 的一部分。這樣就避免了多線程直接向 Heap 請求內存分配的同步問題,提高了對象分配的效率。
  • 液晶監視器選購要點及技術發展趨勢分析
    1液晶監視器選購要點  目前,在安防監控系統中比較常用的監視器主要有CRT監視器、LCD監視器,以及TV液晶電視、PC液晶顯示器等非安防專用的民用顯示器。其中,CRT監視器由於技術比較陳舊,逐步退出市場,LCD液晶監視器逐漸發展成為市場主流。
  • Go語言和Java、Python等其他語言的對比分析
    Google 親兒子--->Golang(夠浪) ,出身名門,血統純正4、自由高效:組合的思想、無侵入式的接口Go語言可以說是開發效率和運行效率二者的融合,天生的並發編程支持。Go語言支持當前所有的編程範式,包括過程式編程、面向對象編程、面向接口編程、函數式編程。程式設計師們可以各取所需、自由組合、想怎麼玩就怎麼玩。
  • 問號臉為什麼 Java 中1000==1000 為 false而 100==100 為 true
    本文轉載自【微信公眾號:java進階架構師,ID:java_jiagoushi】經微信公眾號授權轉載,如需轉載與原文作者聯繫為什麼 Java 中「1000==1000」為false,而」100==100「為true?這是一個挺有意思的討論話題。
  • 佳能發布小型輕量化4K監視器DP-V2410
    該監視器面板具有防眩光能力,如果用戶在明亮的環境下使用,可將不良反射眩光以及背景反射的情況降至最低。此外,用戶  可以通過監視器了解到已連接攝影機的元數據,同時通過質量同步功能,可基於元數據實現對顯示圖像品質的自動調整4。
  • 其實你只缺一臺監視器
    單眼相機通過連接監視器,可以方便的同步觀看到拍攝畫面。相比相機自帶的3英寸液晶屏,監視器的最小尺寸也在4.8寸左右,還擁有輔助聚焦、安全框、畫幅切換等實用功能。同時監視器不依賴相機供電,可以有效的延長相機電池使用時間。通過搭配遮光罩,可以有效地解決強光幹擾。
  • 什麼,JAVA的泛型是偽泛型
    通過現代idea自動編譯功能,由此可以大大提高我們的編程效率但是有關java的泛型有一些值得思考的問題:方法重載代碼示範字節碼片段然後用jd-gui工具反編譯回java增加了一些屬性來記錄這個具體的類型,解決伴隨泛型而來的參數類型的識別問題,如如Signature、LocalVariableTypeTableSignature和LocalVar所以有個說法是:java
  • Java 查找替換Excel數據
    使用工具工具:Free Spire.XLS for Java (免費版)註:可通過e-iceblue中文官網在Java產品板塊下載包,並解壓將lib文件夾下的jar文件導入java程序;或者通過maven倉庫下載導入。Jar導入效果:
  • 上半年監視器廠商遭遇不完美風暴
    媒體平板銷量快速增長,而經濟成長速度放慢,導致2011年整體監視器市場增長緩慢。因此,IHS公司把2011年全年監視器出貨量增長率預估從2.5%降到了1.5%。本文引用地址:http://www.eepw.com.cn/article/123354.htm  目前預計2011年全球監視器銷量為1.732億臺,而2010年是1.707億臺。
  • 性能監視器(PerfMon)
    性能監視器(PerfMon) 系統安全
  • 如何才能更好的保護好22寸液晶監視器!
    因為在液晶屏幕的構造中,基本呈現一個夾芯的狀況,即兩塊玻璃基本中間充滿著運動的液晶分子。而信號電壓則直接控制晶體的開關狀態。並利用電晶體控制液晶分子但對於液晶分子來說,其本身也有著明顯的光學各向異性。以調節燈光發射管的光線,從而實現圖像的高清顯示。 液晶監視器
  • 在Win2000 Server 中使用網絡監視器
    >監視器:一、網絡監視器概述使用網絡監視器捕獲和顯示運行Windows2000Server的計算機從區域網(LAN)上接收的幀(也稱作數據包)。當您安裝網絡監視器時,網絡監視器驅動程序會自動安裝在同一臺計算機上。
  • 在Win2K Server 中使用網絡監視器
    二、了解網絡監視器下面我們一起來了解一下網絡監視器:1、網絡監視器組件網絡監視是由稱為網絡監視器的系統管理工具和稱為網絡監視器驅動程序的網絡協議組成的。為了捕獲、顯示和分析網絡數據包(也稱為幀),您必須安裝所有這些組件。