真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Javamonitor機(jī)制使用方法解析

monitor概念

成都創(chuàng)新互聯(lián)公司擁有十余年成都網(wǎng)站建設(shè)工作經(jīng)驗(yàn),為各大企業(yè)提供做網(wǎng)站、成都做網(wǎng)站服務(wù),對于網(wǎng)頁設(shè)計、PC網(wǎng)站建設(shè)(電腦版網(wǎng)站建設(shè))、重慶App定制開發(fā)、wap網(wǎng)站建設(shè)(手機(jī)版網(wǎng)站建設(shè))、程序開發(fā)、網(wǎng)站優(yōu)化(SEO優(yōu)化)、微網(wǎng)站、申請域名等,憑借多年來在互聯(lián)網(wǎng)的打拼,我們在互聯(lián)網(wǎng)網(wǎng)站建設(shè)行業(yè)積累了很多網(wǎng)站制作、網(wǎng)站設(shè)計、網(wǎng)絡(luò)營銷經(jīng)驗(yàn),集策劃、開發(fā)、設(shè)計、營銷、管理等網(wǎng)站化運(yùn)作于一體,具備承接各種規(guī)模類型的網(wǎng)站建設(shè)項(xiàng)目的能力。

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

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

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

monitor基本元素

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

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

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

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

臨界區(qū)的圈定

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

monitor object

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

monitor機(jī)制中,monitor 我不檢測題充當(dāng)著維護(hù)mutex和wait, signalAPI來管理線程的阻塞和喚醒。

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

Java monitor機(jī)制使用方法解析

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

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。


網(wǎng)站標(biāo)題:Javamonitor機(jī)制使用方法解析
文章來源:http://weahome.cn/article/gggseh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部