多執行緒通訊(生產者,消費者問題)

2021-10-03 11:05:54 字數 1733 閱讀 2325

理解多執行緒通訊,就是要用多執行緒需要有乙個共同的共享資源,通過該共享資源完成執行緒的通訊。

例項:工廠——消費者——產品

工廠生產產品,消費者消費產品,產品就成了兩者之間的共享資源

產品的成員屬性:產品名,產品**,是否需要生產的標識

public

class

goods

public

void

setname

(string name)

public

float

getprice()

public

void

setprice

(float price)

public

boolean

isproduct()

public

void

setproduct

(boolean product)

public

goods()

public

goods

(string name,

float price,

boolean product)

}

工廠根據是否需要生產的標識來生產產品

1.判斷是否需要生產

如果需要生產,就修改生產標識,喚醒消費者執行緒,如果不需要生產,就進入無限等待狀態,等候被喚醒

public

class

produce

implements

runnable

catch

(interruptedexception e)

//需要生產

if(goods.

isproduct()

)else

//修改標記

goods.

setproduct

(false);

system.out.

println

("生產者生產了"

+goods.

getname()

+":"

+goods.

getprice()

);//喚醒消費者

goods.

notify()

; system.out.

println

("需要喚醒消費者消費");

}else

catch

(interruptedexception e)}}

}}public

produce

(goods goods)

}

消費者消費判斷生產標識,不需要生產代表可以消費,消費了就要修改生產標識,喚醒生產者程序,如果需要生產那麼,消費者程序就進入無限等待,等待喚醒

public

class

custmor

implements

runnable

catch

(interruptedexception e)

//判斷是否可以進行消費if(

!goods.

isproduct()

)else

catch

(interruptedexception e)}}

}}public

custmor

(goods goods)

}

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

從上乙個小測試當中,我們會發現執行緒之間存在爭奪問題,所以在這裡用上了訊號鎖 include include include include include include include define max size 5 struct data structpro max size sem t ...

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

package multithreading.pc 測試 生產者消費者模型 利用緩衝區解決 管程法 生產者,消費者,產品,緩衝區 public class testpc 生產者 class productor extends thread 生產 override public void run 消費...

多執行緒 生產者消費者

這個就不多說了,直接上 include include using namespace std const unsigned short size of buffer 10 緩衝區長度 unsigned short productid 0 產品號 unsigned short consumeid 0...