多執行緒間的通訊之等待喚醒機制

2021-09-07 14:13:58 字數 2231 閱讀 1525

執行緒間的通訊:

事實上就是多個執行緒在操作同乙個資源。

可是操作動作不同

樣例:需求:模擬簡單賣票系統(輸入乙個人。緊接著輸出乙個人)

出現了安全問題(輸出了麗麗  man)

同步後

class res

儘管安全 問題攻克了,但並沒出現我們想要的一男一女交替的情景

這是就引進一種方法:等待喚醒機制

都使用在同步中,由於要對持有監視器(鎖)的操作。

所以要使用在同步中,由於僅僅有同步才具有鎖。

為什麼這些操作執行緒的鳳飛飛要定義object類中呢?

由於這些方法在操作同步中線程時。都必需要標識它們所操作執行緒中的鎖,

僅僅有同乙個鎖上的被等待執行緒。能夠被同乙個鎖上notify喚醒。

不能夠被不同鎖中的執行緒進行喚醒。

也就是說,等待和喚醒必須是同乙個鎖。

而鎖能夠是隨意物件,所以能夠被隨意物件呼叫的方法定義object類中。

以下進行**改良:

class res

catch(exception e){}

this.name=name;

this.***=***;

this.flag=true;

this.notify();

} public synchronized void out()

catch(exception e){}

system.out.println("output....."+this.name+"+++"+this.***);

this.flag=false;

this.notify(); }}

class input implements runnable

public void run()

} }}

class output implements runnable

public void run()

} }}

class inputoutputdemo4

}

多執行緒間的通訊之等待喚醒機制

執行緒間的通訊 其實就是多個執行緒在操作同乙個資源。但是操作動作不同 例子 需求 模擬簡單賣票系統 輸入乙個人,緊接著輸出乙個人 出現了安全問題 輸出了麗麗 man 同步後class res 雖然安全 問題解決了,但並沒出現我們想要的一男一女交替的情景 這是就引進一種方法 等待喚醒機制 都使用在同步...

144 多執行緒 執行緒間通訊 等待喚醒機制

class res class input implements runnable public void run catch exception e if x 0 else x x 1 2 r.flag true r.notify class output implements runnable ...

執行緒間通訊 等待喚醒機制

執行緒間通訊 其實就是多個執行緒在操作同乙個資源,但是操作的動作不同 class res2 class input2 implements runnable public void run catch interruptedexception e if x 0 else x x 1 2 r.flag...