java 執行緒 生產者消費者模式

2021-09-02 09:26:37 字數 1647 閱讀 9700

需要到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 當快取區已滿 已空時...