Java執行緒的等待 喚醒機制例項演示

2021-08-13 11:21:01 字數 2315 閱讀 3163

package demo;

/* * 執行緒間通訊;

* 多個執行緒處理同意資源,但是任務卻不同

* */

/* * 等待/喚醒機制

* 涉及的方法:

* 1·wait():讓執行緒處於凍結狀態,被wait的執行緒會被儲存到執行緒池(容器)中

* 2·notify():喚醒執行緒池中的乙個執行緒(任意)

* 3·notifyall():喚醒執行緒池中的所有執行緒

* 這些方法都必須定義在同步中,因為這些方法時用於操作執行緒狀態的方法,必須要明確

* 到底要操作的是哪個鎖上的執行緒

* */

//為什麼操作執行緒的方法wait(),notify(),notifyall()定義在object類中?

//因為這些方法是監視器的方法。監視器其實就是鎖。鎖可以是任意的物件,

//任意的物件呼叫的方法一定定義在object類中

//資源類

class resource

//輸入類

class input implements runnable

@override

public void run()

catch (interruptedexception e)

if(x==0)

else

r.flag = true;

r.notify();

}x = (x+1)%2;

} } }

//輸出類

class output implements runnable

@override

public void run()

catch (interruptedexception e)

system.out.println(r.name+"..."+r.***);

r.flag = false;

r.notify();

}} }

}public class resourcedemo

}

###優化之後的**

package demoupgraded;

/* * 執行緒間通訊;

* 多個執行緒處理同意資源,但是任務卻不同

* */

/* * 等待/喚醒機制

* 涉及的方法:

* 1·wait():讓執行緒處於凍結狀態,被wait的執行緒會被儲存到執行緒池(容器)中

* 2·notify():喚醒執行緒池中的乙個執行緒(任意)

* 3·notifyall():喚醒執行緒池中的所有執行緒

* 這些方法都必須定義在同步中,因為這些方法時用於操作執行緒狀態的方法,必須要明確

* 到底要操作的是哪個鎖上的執行緒

* */

//為什麼操作執行緒的方法wait(),notify(),notifyall()定義在object類中?

//因為這些方法是監視器的方法。監視器其實就是鎖。鎖可以是任意的物件,

//任意的物件呼叫的方法一定定義在object類中

//資源類

class resource

catch (interruptedexception e)

this.name = name;

this.*** = ***;

flag = true;

notify();

} /*

* 同輸入執行緒一樣,提供向外操作成員變數的介面

* 若標誌位flag為false則輸出執行緒進入等待狀態,等待輸入執行緒的notify喚醒

* 若標誌位flag為true則輸出姓名和性別

* 同時將標誌位flag置為false

* 喚醒輸入執行緒

* */

public synchronized void out()

catch (interruptedexception e)

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

flag = false;

notify(); }}

//輸入類

class input implements runnable

@override

public void run()

else

x = (x+1)%2;

} } }

//輸出類

class output implements runnable

@override

public void run()

} }public class upgradedresourcedemo

}

java 多執行緒 等待喚醒機制

package thread執行緒 生產者消費者問題 問題1 為什麼要用while而不用if進行判斷 因為是多執行緒在操作同一資源,即有多個生產者也有多個消費者,如果用if進行判斷的話會出現生產者生產連續生產多次,而消費者只消費 消費一次,或生產者生產一次消費者消費多次的錯誤資訊,這是為什麼呢?原因...

java多執行緒等待喚醒機制

等待喚醒機制 object類中提供了三個方法 wait 等待 notify 喚醒單個執行緒 notifyall 喚醒所有執行緒 為什麼這些方法不定義在thread類而定義在object類中呢?這些方法的呼叫必須通過鎖物件呼叫,而我們使用的鎖物件是任意鎖物件。所以,這些方法必須定義在object類中。...

執行緒等待喚醒機制

等待喚醒機制 乙個執行緒在工作時發現某些條件不滿足了,這時可以釋放掉鎖,並暫停工作。目的是讓另乙個執行緒插入進來,進行條件的補給 後進入的執行緒在補足條件後,可以進行 喚醒 將之前所有等待的執行緒喚醒,讓他們繼續工作,然後自己退出。喚醒之後執行的 system.out.println 包子已經做好了...