java多執行緒同步案例之 生產者消費者模型

2021-07-10 17:09:02 字數 1304 閱讀 2842

需求:

1 同一時間內只能有乙個生產者生產 2

同一時間內只能有乙個消費者消費 3

生產者生產的同時消費者不能消費 4

消費者消費的同時生產者不能生產

消費者和生產者只能有乙個在工作。

----同步方法或者同步**快 5

共享空間空時消費者不能繼續消費 6

共享空間滿時生產者不能繼續生產

注意

:

1、

wait

、notify

、notifyall

方法的呼叫必須放在同步方法和同步**塊裡面

是呼叫「同步鎖」物件的

wait

、notify

、notifyall

方法而不是執行緒物件的方法。

//定義乙個倉庫類

public class storage catch (interruptedexception e)

}this.notify();

cur_num += num;

system.out.println(thread.currentthread().getname() + "入庫" + num +",庫存為:" + cur_num);

}//出庫的方法

public synchronized void out(int num) catch (interruptedexception e)

}this.notify();

cur_num -= num;

system.out.println(thread.currentthread().getname() + "出庫" + num +",庫存為:" + cur_num);

//接著定義消費者執行緒類

public class customer extends thread

public void run() catch (interruptedexception e)

//呼叫倉庫中的出庫方法,將需求變數傳入

s.out(num);}}

//還需定義乙個生產者執行緒類

public class producer extends thread

public void run() catch (interruptedexception e)

//呼叫倉庫中的入庫方法,將準備入庫的數量傳入

s.in(num);}}

//最後,建立test類進行測試

public class test

}

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

當多個執行緒併發訪問同乙個資源時,可使用生產者 消費者模式解決,通常有訊號燈法和管程法,本文使用訊號燈法實現,其基本思想為 生產者生產時,消費者等待,生產結束後通知消費者消費 消費者消費時,生產者等待,消費完後通知生產者生產。需要object類中wait 方法和notify 或者notifyall ...

多執行緒 生產者消費者案例

案例需求 生產者消費者案例中包含的類 奶箱類 box 定義乙個成員變數,表示第x瓶奶,提供儲存牛奶和獲取牛奶的操作 生產者類 producer 實現runnable介面,重寫run 方法,呼叫儲存牛奶的操作 消費者類 customer 實現runnable介面,重寫run 方法,呼叫獲取牛奶的操作 ...

java多執行緒之生產者與消費者案例

多生產者,多消費者的問題。if判斷標記,只有一次,會導致不該執行的執行緒執行了。出現了資料錯誤的情況。while判斷標記,解決了執行緒獲取執行權後,是否要執行!notify 只能喚醒乙個執行緒,如果本方喚醒了本方,沒有意義。而且while判斷標記 notify會導致死鎖。notifyall解決了本方...