偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Java編程語(yǔ)言中notify和wait的具體應(yīng)用

開(kāi)發(fā) 后端
Java編程語(yǔ)言是一門具有藝術(shù)性的計(jì)算機(jī)語(yǔ)言。但是我們?cè)诓粩嗟氖褂弥袝?huì)出現(xiàn)很多的問(wèn)題。首先我們來(lái)看看notify和wait具體的應(yīng)用情況。

Java編程語(yǔ)言在應(yīng)用的時(shí)候需要我們不斷的進(jìn)行相關(guān)知識(shí)的學(xué)習(xí),首先我們先要理解notify()和wait(),只有理解了這個(gè)語(yǔ)句才能更好的進(jìn)行相關(guān)的應(yīng)用。希望大家有所收獲。

為什么在前幾天紀(jì)錄線程的時(shí)候沒(méi)有紀(jì)錄這兩個(gè)方法呢,因?yàn)檫@兩個(gè)方法本來(lái)就不屬于Thread類,而是屬于最底層的object基礎(chǔ)類的,也就是說(shuō)不光是Thread,每個(gè)對(duì)象都有notify和wait的功能,為什么?因?yàn)樗麄兪怯脕?lái)操縱鎖的,而每個(gè)對(duì)象都有鎖,鎖是每個(gè)對(duì)象的基礎(chǔ),既然鎖是基礎(chǔ)的,那么操縱鎖的方法當(dāng)然也是最基礎(chǔ)了.

按照Think in Java中的解釋:"wait()允許我們將線程置入“睡眠”狀態(tài),同時(shí)又“積極”地等待條件發(fā)生改變.而且只有在一個(gè)notify()或notifyAll()發(fā)生變化的時(shí)候,線程才會(huì)被喚醒,并檢查條件是否有變."

我們來(lái)解釋一下這句話.

"wait()允許我們將線程置入“睡眠”狀態(tài)",也就是說(shuō),wait也是讓當(dāng)前線程阻塞的,這一點(diǎn)和sleep或者suspend是相同的.那和sleep,suspend有什么區(qū)別呢?

區(qū)別在于"(wait)同時(shí)又“積極”地等待條件發(fā)生改變",這一點(diǎn)很關(guān)鍵,sleep和suspend無(wú)法做到.因?yàn)槲覀冇袝r(shí)候需要通過(guò)同步(synchronized)的幫助來(lái)防止線程之間的沖突,而一旦使用同步,就要鎖定對(duì)象,也就是獲取對(duì)象鎖,其它要使用該對(duì)象鎖的線程都只能排隊(duì)等著,等到同步方法或者同步塊里的程序全部運(yùn)行完才有機(jī)會(huì).在同步方法和同步塊中,無(wú)論sleep()還是suspend()都不可能自己被調(diào)用的時(shí)候解除鎖定,他們都霸占著正在使用的對(duì)象鎖不放. #t#

而wait卻可以,它可以讓同步方法或者同步塊暫時(shí)放棄對(duì)象鎖,而將它暫時(shí)讓給其它需要對(duì)象鎖的人(這里應(yīng)該是程序塊,或線程)用,這意味著可在執(zhí)行wait()期間調(diào)用線程對(duì)象中的其他同步方法!在其它情況下(sleep啊,suspend啊),這是不可能的.

但是注意我前面說(shuō)的,在Java編程語(yǔ)言中只是暫時(shí)放棄對(duì)象鎖,暫時(shí)給其它線程使用,我wait所在的線程還是要把這個(gè)對(duì)象鎖收回來(lái)的呀.wait什么?就是wait別人用完了還給我啊!好,那怎么把對(duì)象鎖收回來(lái)呢?

第一種方法,限定借出去的時(shí)間.在wait()中設(shè)置參數(shù),比如wait(1000),以毫秒為單位,就表明我只借出去1秒中,一秒鐘之后,我自動(dòng)收回.

第二種方法,讓借出去的人通知我,他用完了,要還給我了.這時(shí),我馬上就收回來(lái).哎,假如我設(shè)了1小時(shí)之后收回,別人只用了半小時(shí)就完了,那怎么辦呢?靠!當(dāng)然用完了就收回了,還管我設(shè)的是多長(zhǎng)時(shí)間啊.

那么別人怎么通知我呢?相信大家都可以想到了,notify(),這就是最后一句話"而且只有在一個(gè)notify()或notifyAll()發(fā)生變化的時(shí)候,線程才會(huì)被喚醒"的意思了.
因此,我們可將一個(gè)wait()和notify()置入任何同步方法或同步塊內(nèi)部,無(wú)論在那個(gè)類里是否準(zhǔn)備進(jìn)行涉及線程的處理。而且實(shí)際上,我們也只能在同步方法或者同步塊里面調(diào)用wait()和notify().這個(gè)時(shí)候我們來(lái)解釋上面的程序,簡(jiǎn)直是易如反掌了.

synchronized(b){...};在Java編程語(yǔ)言中的意思是定義一個(gè)同步塊,使用b作為資源鎖。b.wait();的意思是臨時(shí)釋放鎖,并阻塞當(dāng)前線程,好讓其他使用同一把鎖的線程有機(jī)會(huì)執(zhí)行,在這里要用同一把鎖的就是b線程本身.這個(gè)線程在執(zhí)行到一定地方后用notify()通知wait的線程,鎖已經(jīng)用完,待notify()所在的同步塊運(yùn)行完之后,wait所在的線程就可以繼續(xù)執(zhí)行.
 

責(zé)任編輯:張浩 來(lái)源: TT網(wǎng)絡(luò)
相關(guān)推薦

2025-01-09 08:49:36

Java并發(fā)編程

2021-07-10 08:37:36

Notify機(jī)制Java

2010-03-17 18:38:53

Java編程語(yǔ)言

2015-08-05 09:33:21

Javawaitnotify

2020-12-15 08:06:45

waitnotifyCondition

2022-02-21 08:20:24

Wait方法Notify

2011-12-25 15:35:05

ibmdwJavaC++

2024-01-08 07:02:48

數(shù)據(jù)設(shè)計(jì)模式

2009-06-29 12:58:47

This關(guān)鍵字java

2024-03-26 11:54:35

編程抽象代碼

2009-06-18 12:37:26

java編程語(yǔ)言

2011-03-30 11:01:13

C語(yǔ)言隨機(jī)

2021-01-21 09:23:35

Java語(yǔ)言

2022-08-26 09:51:49

索引簽名編程語(yǔ)言

2023-10-12 07:35:45

面試線程通信

2009-04-30 15:15:01

Java抽象類接口

2009-06-12 15:01:48

Java數(shù)組Java教程

2009-11-23 11:25:54

php curl

2013-06-27 10:31:39

2010-03-26 17:34:29

Python歷史
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)