java多執行緒之消費者生產者模式(一)

2021-07-13 23:39:12 字數 1865 閱讀 3150

/*@author shijin

* 生產者與消費者模型中,要保證以下幾點:

* 1 同一時間內只能有乙個生產者生產     生產方法加鎖sychronized

* 2 同一時間內只能有乙個消費者消費     消費方法加鎖sychronized

* 3 生產者生產的同時消費者不能消費     生產方法加鎖sychronized

* 4 消費者消費的同時生產者不能生產     消費方法加鎖sychronized

* 5 共享空間空時消費者不能繼續消費     消費前迴圈判斷是否為空,空的話將該執行緒wait,釋放鎖允許其他同步方法執行

* 6 共享空間滿時生產者不能繼續生產     生產前迴圈判斷是否為滿,滿的話將該執行緒wait,釋放鎖允許其他同步方法執行   

*///主類

class

producerconsumer  

}  //class

mantou  

public

string tostring()  

}  //共享棧空間

class

stackbasket  

this

.notify();  

}catch

(interruptedexception e)catch

(illegalmonitorstateexception e)  

sm[index] = m;  

index++;  

system.out.println("生產了:"

+ m + 

" 共"

+ index + 

"個饅頭"

);  

}  /** 

* show 消費方法

* show 該方法為同步方法,持有方法鎖

* show 首先迴圈判斷空否,空的話使該執行緒等待,釋放同步方法鎖,允許生產;

* show 當不空時首先喚醒正在等待的生產方法,但是也只能讓其進入就緒狀態

* show 等消費結束釋放同步方法鎖後生產才能持有該鎖進行生產

* @param b true 表示顯示,false 表示隱藏 

* @return 沒有返回值 

*/public

synchronized

mantou pop()  

this

.notify();  

}catch

(interruptedexception e)catch

(illegalmonitorstateexception e)  

index--;  

system.out.println("消費了:---------"

+ sm[index] + 

" 共"

+ index + 

"個饅頭"

);  

return

sm[index];  

}  }  

class

producer 

implements

runnable  

/** 

* show 生產程序. 

*/public

void

run()catch

(interruptedexception e)  

}  }  

}  class

consumer 

implements

runnable  

/** 

* show 消費程序.

*/public

void

run()catch

(interruptedexception e)  

}  }  

}  

Java多執行緒之消費者生產者模式

這個例項應該是學習執行緒的乙個經典例子,生產者和消費者模式。寫的很好,詳細請看內容。author shijin 生產者與消費者模型中,要保證以下幾點 1 同一時間內只能有乙個生產者生產 生產方法加鎖sychronized 2 同一時間內只能有乙個消費者消費 消費方法加鎖sychronized 3 生...

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

author shijin 生產者與消費者模型中,要保證以下幾點 1 同一時間內只能有乙個生產者生產 生產方法加鎖sychronized 2 同一時間內只能有乙個消費者消費 消費方法加鎖sychronized 3 生產者生產的同時消費者不能消費 生產方法加鎖sychronized 4 消費者消費的同...

Java 多執行緒之生產者消費者模型

package com.yuanlief public class main 共享資料類 class mydata 共享資料控制類 class sharedata catch interruptedexception e this.data data writeable false 標記已經生產 n...