2020 4 22學習筆記day45

2021-10-05 08:32:17 字數 1734 閱讀 3232

wait、notify、notifyall方法都是object中的方法,任何物件都可以呼叫到這個方法。

但是只能在加鎖的**塊中,使用【當做鎖的物件】來呼叫wait、notify、notifyall方法。其他情況,如果不是在加鎖的**塊中,或者不是使用【當做鎖的物件】來呼叫wait、notify、notifyall方法,是會報錯的。

wait方法:

當乙個執行緒在拿到鎖去執行加鎖的**的時候,如果這個執行緒在**中執行了【鎖物件.wait()】方法,那麼這個時候,當前執行緒就會立馬交出cpu使用權,同時釋放之前拿到的鎖物件,並且從執行狀態直接進入到等待池中變為阻塞狀態。

當乙個執行緒由於呼叫了【鎖物件.wait()】方法進入到等待池中變為阻塞狀態的時候,可以在另乙個執行緒中呼叫【鎖物件.notify()】方法把這個執行緒叫醒,或者呼叫這個執行緒的interrupt方法把它的阻塞狀態給打斷,這時候在等待池中阻塞的這個執行緒就會進入到鎖池中,並且除以處於阻塞狀態,但是它會時刻監控著它需要用的鎖是否可用,一旦鎖物件變成可用的,那麼就會從鎖池中的阻塞狀態進入到就緒狀態。

notify():

喚醒在等待該物件同步鎖的執行緒(只喚醒乙個,如果有多個在等待),注意的是在呼叫此方法的時候,並不能確切的喚醒某乙個等待狀態的執行緒,而是由jvm確定喚醒哪個執行緒,而且不是按優先順序。

呼叫任意物件的notify()方法則導致因呼叫該物件的 wait()方法而阻塞的執行緒中隨機選擇的乙個解除阻塞(但要等到獲得鎖後才真正可執行)。

notifyall():

喚醒所有等待的執行緒,注意喚醒的是notify之前wait的執行緒,對於notify之後的wait執行緒是沒有效果的。

public

class

threadtest7

private

static

class

account

//存錢

public

synchronized

void

pos(

int money)

//取錢

public

synchronized

void

wit(

int money)

catch

(interruptedexception e)

} balance-=money;

system.out.

println

(name+

"剛剛從賬戶中消費"

+money+

"元,當前餘額為"

+balance+

"元");}

DAY4學習筆記

流程控制的三種語法 if 用於判斷條件,為了讓計算機可以像人一樣,具有判斷的能力。1 當運用if語法時,如果滿足條件則執行某程式,可以和else連用,即反之則執行另一程式。2 if可以和elif進行多分支使用,多分支時,一旦有某一條件滿足,則不繼續執行其他條件。3 if語句的巢狀,當滿足某一條件時,...

java學習筆記day4

陣列的定義方式 int arr new int 2 int arr new int 2 int arr new int int arr 舉例 class demo system.out.println arr 2 陣列中的陣列 二維陣列 格式1 int arr new int 3 2 定義了名稱為a...

Python學習筆記 Day4

4.1 類和物件 1.定義類 class 類名 class televison 定義乙個電視機 defwatch self print watching 這個電視機能看電視 2.建立物件 物件名 類名 sony televison 索尼這個牌子的電視機 使用watch功能 物件名.watch son...