多執行緒之生產者消費者問題

2021-10-08 06:34:58 字數 1643 閱讀 2047

一、問題概述

是處理併發問題的乙個典型應用。生產者程序和消費者程序同時發生,以此修改快取區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...