理解多執行緒通訊,就是要用多執行緒需要有乙個共同的共享資源,通過該共享資源完成執行緒的通訊。
例項:工廠——消費者——產品
工廠生產產品,消費者消費產品,產品就成了兩者之間的共享資源
產品的成員屬性:產品名,產品**,是否需要生產的標識
工廠根據是否需要生產的標識來生產產品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...