Java 生產者 消費者模型

2021-08-27 08:18:05 字數 1470 閱讀 7385

生產者消費者問題是執行緒模型中的經典問題:生產者和消費者在同一時間段內共用同一儲存空間,生產者向空間裡生成資料,而消費者取走資料。

此處實現如下情況的生產-消費模型:

生產者不斷交替地生產兩組資料「姓名--1 ---> 內容--1」,「姓名--2 --->內容--2」,消費者不斷交替地獲取這兩組資料,這裡的「姓名--1」和「姓名--2」模擬為資料的名稱,「內容--1」和「內容--2」模擬為資料的內容。

由於程式中涉及到執行緒執行的不確定性,因此可能會出現以下問題:

問題1要靠同步來解決,問題2要靠執行緒間通訊,生產者執行緒放入資料後,通知消費者執行緒取出資料,消費者執行緒取出資料後,通知生產者執行緒生產資料,這裡用wait/notify機制來實現。

具體code:

class info  catch (interruptedexception e) 

}this.setname(name);//設定名稱

try catch (interruptedexception e)

this.setcontent(content);//設定內容

flag = false;//改變標誌位,表示可以取走

super.notify();

}public synchronized void get() catch (interruptedexception e)

} try catch (interruptedexception e)

system.out.println(this.getname() + " -->" + this.getcontent());

flag = true;//改變標誌位,表示可以生產

super.notify();

}public void setname(string name)

public void setcontent(string content)

public string getname()

public string getcontent()

}class producer implements runnable

public void run() else }}

}class consumer implements runnable

public void run()

} } public class threadcasedemo03catch(interruptedexception e)

new thread(con).start() ;

} }

執行結果如下:

另外,在run方法中,二者迴圈的次數要相同,否則,當一方的迴圈結束的時候,另一方的迴圈依然在繼續,它會阻塞在wait()方法處,而等不到對方的notify通知。

Java 生產者消費者模型

1.基於synchronzied底層,與wait notifyall實現 object類提供的wait notify方法,配合synchronized使用,操作更底層,可擴充套件性和可控制性小。先來介紹一下wait notify notifyall 方法 wait object類的方法,只能在同步方...

生產者消費者模型

1.生產者消費者問題 producer consumer 有限緩衝,多執行緒同步。生產者執行緒和消費者執行緒共享固定大小緩衝區。2.關鍵是保證生產者不會再緩衝區滿時加入資料,消費者不會在緩衝區空時消耗資料。3.解決辦法 讓生產者在緩衝區滿時休眠,等下次消費者消耗緩衝區中的資料的時候,生產者才能被喚醒...

生產者消費者模型

生產者與消費者 3,2,1 三種關係 生產者與消費者 互斥,同步 消費者與消費者 互斥 生產者與生產者 互斥 條件變數 int pthread cond destroy pthread cond t cond int pthread cond init pthread cond t restrict...