一、問題概述
是處理併發問題的乙個典型應用。生產者程序和消費者程序同時發生,以此修改快取區buffer的資源。
二、模型思路
被管理的資源good,在快取區內:
class goods
}
主程式,再去補充細節:
public class testpc
}
分析下需要,實現思路是快取區類中放有貨物的陣列,生產者程序調動時貨物數目加1,消費者程序調動時貨物數目減1.調動的函式在快取區類中實現
class buffer catch (exception e)
}// 開始新增
a[count] = good;
count++;
// 通知消費者消費
this.notifyall();
}// 開始寫消費者的方法
public synchronized goods pop() catch (interruptedexception e)
}count--;
goods good_out = a[count];
this.notifyall();
return good_out;}}
生產者、消費者程序:
class producer extends thread
@override
public void run() }}
class consumer extends thread
@override
public void run() }}
自身執行緒等待用this.wait(),喚醒其他執行緒用this.notifyall();完整**:
package thread_higher;
public class testpc
}class producer extends thread
@override
public void run()
}}class consumer extends thread
@override
public void run()
}}class buffer catch (exception e)
}// 開始新增
a[count] = good;
count++;
// 通知消費者消費
this.notifyall();
}// 開始寫消費者的方法
public synchronized goods pop() catch (interruptedexception e)
}count--;
goods good_out = a[count];
this.notifyall();
return good_out;
}}class goods
}
多執行緒之生產者消費者問題
生產者 producer 消費者consumer 籃子 basket stack 以棧結構代替的籃子,丟進去的饅頭滿足先進後出 問題描述 生產者生產10個饅頭丟進容量只有6的籃子裡面,消費者不斷吃掉籃子中的饅頭。package consumer producer public class consu...
多執行緒之消費者生產者問題
未經過處理的 如下 這裡有兩個問題 首先是對於info物件,生產者可能只新增了webname的資訊,而沒有來得及新增link資訊,程式就切換到了消費者執行緒,消費者執行緒將webname和上乙個info物件的link聯絡到一起。生產者存放了若干次的資料,消費者才開始讀取資料,或者是消費者取完乙個資料...
多執行緒之經典生產者消費者問題
通過訊號量,wait,nofity,synchronized來解決生產者消費者問題。例項如下 package thread public class threadwaitandnotifytest class iphone catch interruptedexception e system.ou...