緩衝區:
生產者執行緒://緩衝區:擁有乙個值,可以設定可以獲得
public
class buffer
public
void
setvalue(int
value)
}
消費者執行緒://生產者執行緒
public
class
setthread
extends
thread
public
void
run()
}}
測試://消費者執行緒
public
class
getthread
extends
thread
public
void
run()
}}
輸出:public
class buffertest
}
繼續完善:synchronized執行緒同步使得資源有序競爭設定值0
設定值1
設定值2
取得值0
取得值3
取得值3
取得值3
取得值3
取得值3
取得值3
取得值3
取得值3
取得值3
取得值3
取得值3
取得值3
取得值3
取得值3
設定值3
設定值4
設定值5
設定值6
取得值3
設定值7
設定值8
設定值9
取得值7
設定值10
設定值11
設定值12
取得值10
設定值13
設定值14
設定值15
取得值13
設定值16
取得值16
設定值17
設定值18
取得值18
設定值19
取得值19
設定值20
取得值20
設定值21
設定值22
設定值23
取得值21
設定值24
取得值24
設定值25
設定值26
設定值27
設定值28
取得值25
取得值29
取得值29
取得值29
設定值29
取得值29
生產者和消費者執行緒不變//緩衝區:擁有乙個值,可以設定可以獲得
public
class buffer catch (interruptedexception e)
}system.out.println(" 取得值" + value);
flag = false;
notify();//將等待這個資源的其他程序喚醒
return
value;
}public synchronized void
setvalue(int
value) catch (interruptedexception e)
}//flag為false:沒有數值可取,所以要進行設定
this.value = value;
system.out.println("設定值" + value);
flag = true;
notify();//喚醒消費者執行緒
}}
輸出為:資源有序
設定值0
取得值0
設定值1
取得值1
設定值2
取得值2
設定值3
取得值3
設定值4
取得值4
設定值5
取得值5
設定值6
取得值6
設定值7
取得值7
設定值8
取得值8
設定值9
取得值9
設定值10
取得值10
設定值11
取得值11
設定值12
取得值12
設定值13
取得值13
設定值14
取得值14
設定值15
取得值15
設定值16
取得值16
設定值17
取得值17
設定值18
取得值18
設定值19
取得值19
設定值20
取得值20
設定值21
取得值21
設定值22
取得值22
設定值23
取得值23
設定值24
取得值24
設定值25
取得值25
設定值26
取得值26
設定值27
取得值27
設定值28
取得值28
設定值29
取得值29
生產者消費者,多執行緒問題
從上乙個小測試當中,我們會發現執行緒之間存在爭奪問題,所以在這裡用上了訊號鎖 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 消費...
多執行緒 生產者和消費者
生產者 消費者問題 生產者向產品區里放產品,當產品區里滿了,需要等待 消費者從產品區里取產品消耗,當產品區里空了,需要等待。public class producerandconsumer 消費者 static class consumer implements runnable catch int...