需求:
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解決了本方...