1、生產者、消費者模型(若容器容量為1)
生產者執行緒:
if(a ==1)
a++;
notify;
消費者:
if (a == 0)
a--;
notify;
2、下面是乙個**實現(簡單的快取容量只有1,即:若容器中有乙個了,就不能再生產了):
(1)最基本的寫法:
資源類:
public class sample catch (interruptedexception e)
}a++;
notify();
system.out.println(a);
}public synchronized void decrease() catch (interruptedexception e)
}a--;
notify();
system.out.println(a);}}
執行緒類:
生產者執行緒類:
public class increasethread extends thread
@override
public void run() catch (interruptedexception e)
sample.increase();}}
}消費者執行緒類:
public class decreasethread extends thread
@override
public void run() catch (interruptedexception e)
sample.decrease();}}
}客戶端測試類:
public class test
}輸出:10
1010
(2)這裡存在乙個問題,就是當有多個生產者和消費和消費者執行緒的時候,就會出現問題,輸出的值並不一致是1 0 1 0。具體問題原因可以用**具體分析一下。
解決方案:
資源類:
public class sample catch (interruptedexception e)
}a++;
notify();
system.out.println(a);
}public synchronized void decrease() catch (interruptedexception e)
}a--;
notify();
system.out.println(a);}}
客戶端類
public class test
}說明,一般都用while;(這裡用if**片段,純粹是為了過度)
3、**公升級,容器容量是number=5;
和上面相比,僅需修改如下**:
public class sample catch (interruptedexception e)
}a++;
notify();
system.out.println(a);
}public synchronized void decrease() catch (interruptedexception e)
}a--;
notify();
system.out.println(a);}}
Java實現生產者消費者問題
生產者 消費者 producer consumer 問題,也稱作有界緩衝區 bounded buffer 問題,兩個程序共享乙個公共的固定大小的緩衝區。其中乙個是生產者,用於將訊息放入緩衝區 另外乙個是消費者,用於從緩衝區中取出訊息。問題出現在當緩衝區已經滿了,而此時生產者還想向其中放入乙個新的資料...
Java消費者生產者問題
乙個執行緒作為生產者,乙個執行緒作為消費者。生產者和消費者在同時執行。生產者每生產一次消費者就消費一次。生產和消費的數量用隨機數來表示。要求 生產者的數量和上次消費後的剩餘數量和不大於1000.sleep 可以指定休眠的時間,如果沒有其他操作,那麼到點自然醒。如果sleep有鎖資源,那麼不釋放 執行...
java生產者消費者
題目 請用多執行緒實現乙個生產者類和乙個消費者類,生產者隨機生成20個字元,消費者將字元列印到控制台。class syncstackcatch interruptedexception e this.notify 通知其它執行緒把資料出棧 buffer index c 資料入棧 index 指標向上...