用多執行緒實現生產者消費者模式(乙個生產者,乙個消費者),在乙個生產者生產了乙個麵包之後,消費者消費
乙個麵包,麵包不能一直生產,也不能一直消費,也不能先消費,後生產。**如下:
package bean;
/* * 1.兩個執行緒同時操作同乙份資料,如果不加上同步,那麼會出現同步安全問題,比如
* 可能先消費,在生產。
* 2.在方法上加上了同步之後,有效的阻止了先消費,在生產的情況。但是,會出現一
* 直生產,或者一直消費同乙個麵包的情況。
* 3.要想阻止一直生產,就要使用等待喚醒機制,定義乙個標記,在生產後改標記,使判斷成功後讓執行緒等待。
* */
public class alotthreat
}class shengchanzhe implements runnable
@override
public void run() }
}class xiaofeizhe implements runnable
@override
public void run() }}
class resource catch (interruptedexception e)
}else
}public synchronized void getname()
else catch (interruptedexception e) }}
}
用喚醒等待機制和判斷的好處是,即使乙個執行緒在一次執行 ,也會在判斷後進入等待狀態。
這裡需要注意的是:在使用wait的時候要格外的小心,可能會出現死鎖。 並且wait()方法是讓執行緒等待,
notify()是喚醒執行緒池中的任意乙個等待執行緒(喚醒哪乙個是隨機的),notifyall()是喚醒執行緒池中所有的等待
執行緒。
執行緒池:當乙個執行緒被wait()方法後,該執行緒會儲存到執行緒池中。
當用多執行緒來實現生產者消費者模式(多個生產者,多個消費者)時:
注意:執行緒的等待狀態是在wait()方法處等待,而不是在run()方法出等待。該**判斷用的是if-else
喚醒的執行緒是不確定的,當生產者喚醒生產者的時候,就會發生死鎖,所以要想確定喚醒對面的執行緒,只需要
把notify()方法換成notifyall()方法即可。
生產者消費者 生產者與消費者模式
一 什麼是生產者與消費者模式 其實生產者與消費者模式就是乙個多執行緒併發協作的模式,在這個模式中呢,一部分執行緒被用於去生產資料,另一部分執行緒去處理資料,於是便有了形象的生產者與消費者了。而為了更好的優化生產者與消費者的關係,便設立乙個緩衝區,也就相當於乙個資料倉儲,當生產者生產資料時鎖住倉庫,不...
多執行緒 生產者消費者
這個就不多說了,直接上 include include using namespace std const unsigned short size of buffer 10 緩衝區長度 unsigned short productid 0 產品號 unsigned short consumeid 0...
多執行緒 生產者消費者模式(2)
現在用佇列來實現一次這個生產者和消費者模型,程式的主要思想如下圖。乙個全域性的佇列,乙個鎖,乙個訊號量,collectimages和sendimages執行緒訪問這個佇列的時候都加鎖。全部原始碼 created by honkee on 5 17 16.include include include...