需要到object類中的等待與通知的倆個方法如下
notify()
喚醒正在等待物件監視器的單個執行緒。
notifyall()
喚醒正在等待物件監視器的所有執行緒。
wait()
導致當前執行緒等待,直到另乙個執行緒呼叫該物件的 notify()方法或 notifyall()方法。
其中wait()方法和sleep()方法有明顯的不同點
共同點是:都可以阻塞執行緒
不同點: wait()方法會釋放鎖,而sleep()方法則不會釋放鎖.
1),首先建立乙個公用的場景如下
package com.hp.pro;
/** * 乙個場景乙份共同的資源
* * 生產者消費者模式 訊號燈法
*/public class film
//開始生產
thread.sleep(500);
this.content=content;
system.out.println("生產了:" + content);
//通知消費
this.notifyall();
//生產者停下來
this.flag=false;
}/**
* 消費
*/public synchronized void watch() throws interruptedexception
//開始消費
thread.sleep(200);
system.out.println("消費了"+content);
//通知生產
this.notifyall();
//讓消費者停止
this.flag=true;}}
2),建立生產者
package com.hp.pro;
/** * 生產者
*/public class producer implements runnable
@override
public void run() catch (interruptedexception e)
}else catch (interruptedexception e) }}
}}
3),建立消費者
package com.hp.pro;
/** * 消費者
*/public class consumer implements runnable
@override
public void run() catch (interruptedexception e) }}
}
4),建立執行的類
package com.hp.pro;
public static void main (string args)
}
執行效果如下
總結: notify() /notifyall() /wait()一定要與synchronized 同步使用否則就同步不了
生產者 消費者模式 java
生產者 消費者模式要求在同乙個程序位址空間內執行的兩個執行緒。生產者執行緒生產物品,然後將物品放置在乙個空緩衝區中供消費者執行緒消費。消費者執行緒從緩衝區中獲得物品,然後釋放緩衝區。當生產者執行緒生產物品時,如果沒有空緩衝區可用,那麼生產者執行緒必須等待消費者執行緒釋放出乙個空緩衝區。當消費者執行緒...
生產者消費者 生產者與消費者模式
一 什麼是生產者與消費者模式 其實生產者與消費者模式就是乙個多執行緒併發協作的模式,在這個模式中呢,一部分執行緒被用於去生產資料,另一部分執行緒去處理資料,於是便有了形象的生產者與消費者了。而為了更好的優化生產者與消費者的關係,便設立乙個緩衝區,也就相當於乙個資料倉儲,當生產者生產資料時鎖住倉庫,不...
java多執行緒生產者 消費者模式
1 生產者僅僅在倉儲未滿時候生產,倉滿則停止生產。2 消費者僅僅在倉儲有產品時候才能消費,倉空則等待。3 當消費者發現倉儲沒產品可消費時候會通知生產者生產。4 生產者在生產出可消費產品時候,應該通知等待的消費者去消費 使用object的wait notify 方法 1.wait 當快取區已滿 已空時...