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

2021-08-19 15:46:03 字數 2731 閱讀 4498

緩衝區:

//緩衝區:擁有乙個值,可以設定可以獲得

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

}

輸出:

設定值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

繼續完善:synchronized執行緒同步使得資源有序競爭

//緩衝區:擁有乙個值,可以設定可以獲得

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...