生產者消費者問題(java實現)

2021-07-25 03:57:28 字數 1662 閱讀 3321

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 指標向上...