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

2021-07-03 21:44:23 字數 2245 閱讀 5749

執行緒間的通訊:

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

但是操作動作不同

例子:

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

出現了安全問題(輸出了麗麗  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...