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

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

Java中信號(hào)量模型的實(shí)際應(yīng)用

本篇內(nèi)容介紹了“Java中信號(hào)量模型的實(shí)際應(yīng)用”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

創(chuàng)新互聯(lián)主要從事成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)從化,十載網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來(lái)電咨詢建站服務(wù):028-86922220

Java信號(hào)量模型的工作方式如下:線程在運(yùn)行的過(guò)程中,可以主動(dòng)停下來(lái),等待某個(gè)Java信號(hào)量模型的通知;這時(shí)候,該線程就進(jìn)入到該信號(hào)量的待召(Waiting)隊(duì)列當(dāng)中;等到通知之后,再繼續(xù)運(yùn)行。

很多語(yǔ)言里面,同步鎖都由專門的對(duì)象表示,對(duì)象名通常叫Monitor。同樣,在很多語(yǔ)言中,Java信號(hào)量模型通常也有專門的對(duì)象名來(lái)表示,比如,Mutex,Semphore。

Java信號(hào)量模型要比同步鎖模型復(fù)雜許多。一些系統(tǒng)中,信號(hào)量甚至可以跨進(jìn)程進(jìn)行同步。另外一些信號(hào)量甚至還有計(jì)數(shù)功能,能夠控制同時(shí)運(yùn)行的線程數(shù)。

我們沒(méi)有必要考慮那么復(fù)雜的模型。所有那些復(fù)雜的模型,都是最基本的模型衍生出來(lái)的。只要掌握了最基本的信號(hào)量模型——“等待/通知”模型,復(fù)雜模型也就迎刃而解了。

我們還是以Java語(yǔ)言為例。Java語(yǔ)言里面的同步鎖和Java信號(hào)量模型概念都非常模糊,沒(méi)有專門的對(duì)象名詞來(lái)表示同步鎖和信號(hào)量,只有兩個(gè)同步鎖相關(guān)的關(guān)鍵字——volatile和synchronized。

這種模糊雖然導(dǎo)致概念不清,但同時(shí)也避免了Monitor、Mutex、Semphore等名詞帶來(lái)的種種誤解。我們不必執(zhí)著于名詞之爭(zhēng),可以專注于理解實(shí)際的運(yùn)行原理。

在Java語(yǔ)言里面,任何一個(gè)Object Reference都可以作為同步鎖。同樣的道理,任何一個(gè)Object Reference也可以作為Java信號(hào)量模型。

Object對(duì)象的wait()方法就是等待通知,Object對(duì)象的notify()方法就是發(fā)出通知。

具體調(diào)用方法為

(1)等待某個(gè)Java信號(hào)量模型的通知

public static final Object signal = new Object();

… f1() {

synchronized(singal) { // 首先我們要獲取這個(gè)信號(hào)量。這個(gè)信號(hào)量同時(shí)也是一個(gè)同步鎖

// 只有成功獲取了signal這個(gè)信號(hào)量兼同步鎖之后,我們才可能進(jìn)入這段代碼

signal.wait(); // 這里要放棄信號(hào)量。本線程要進(jìn)入signal信號(hào)量的待召(Waiting)隊(duì)列

// 可憐。辛辛苦苦爭(zhēng)取到手的Java信號(hào)量模型,就這么被放棄了

// 等到通知之后,從待召(Waiting)隊(duì)列轉(zhuǎn)到就緒(Ready)隊(duì)列里面

// 轉(zhuǎn)到了就緒隊(duì)列中,離CPU核心近了一步,就有機(jī)會(huì)繼續(xù)執(zhí)行下面的代碼了。

// 仍然需要把signal同步鎖競(jìng)爭(zhēng)到手,才能夠真正繼續(xù)執(zhí)行下面的代碼。命苦啊。

需要注意的是,上述代碼中的signal.wait()的意思。signal.wait()很容易導(dǎo)致誤解。signal.wait()的意思并不是說(shuō),signal開始wait,而是說(shuō),運(yùn)行這段代碼的當(dāng)前線程開始wait這個(gè)signal對(duì)象,即進(jìn)入signal對(duì)象的待召(Waiting)隊(duì)列。

(2)發(fā)出某個(gè)Java信號(hào)量模型的通知

… f2() {

synchronized(singal) { // 首先,我們同樣要獲取這個(gè)信號(hào)量。同時(shí)也是一個(gè)同步鎖。

// 只有成功獲取了signal這個(gè)信號(hào)量兼同步鎖之后,我們才可能進(jìn)入這段代碼

signal.notify(); // 這里,我們通知signal的待召隊(duì)列中的某個(gè)線程。

// 如果某個(gè)線程等到了這個(gè)通知,那個(gè)線程就會(huì)轉(zhuǎn)到就緒隊(duì)列中

// 但是本線程仍然繼續(xù)擁有signal這個(gè)同步鎖,本線程仍然繼續(xù)執(zhí)行

// 嘿嘿,雖然本線程好心通知其他線程,

// 但是,本線程可沒(méi)有那么高風(fēng)亮節(jié),放棄到手的同步鎖

// 本線程繼續(xù)執(zhí)行下面的代碼

需要注意的是,signal.notify()的意思。signal.notify()并不是通知signal這個(gè)對(duì)象本身。而是通知正在等待signal信號(hào)量的其他線程。

以上就是Object的wait()和notify()的基本用法。

實(shí)際上,wait()還可以定義等待時(shí)間,當(dāng)線程在某Java信號(hào)量模型的待召隊(duì)列中,等到足夠長(zhǎng)的時(shí)間,就會(huì)等無(wú)可等,無(wú)需再等,自己就從待召隊(duì)列轉(zhuǎn)移到就緒隊(duì)列中了。

另外,還有一個(gè)notifyAll()方法,表示通知待召隊(duì)列里面的所有線程。這些細(xì)節(jié)問(wèn)題,并不對(duì)大局產(chǎn)生影響。

“Java中信號(hào)量模型的實(shí)際應(yīng)用”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!


網(wǎng)頁(yè)題目:Java中信號(hào)量模型的實(shí)際應(yīng)用
文章分享:http://weahome.cn/article/gojscg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部