目录

引子(一个生产者消费者)

例子(多个生产者消费者)

生产消费交替进行


引子(一个生产者消费者)

JAVA系列:Synchronized生产者 消费者例子

JAVA系列:Synchronized生产者 消费者例子JAVA系列:Synchronized生产者 消费者例子

删除准备取数消费S1线程

删除准备取数消费S2线程

添加数据准备 生产A线程

添加数据完成 生产A线程(发出唤醒)

删除取数开始消费S2线程(接收唤醒)

删除取数完成消费S2线程

删除取数开始消费S1线程(接收唤醒)

Exception in thread "消费S1线程" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0

at java.util.ArrayList.RangeCheck(ArrayList.java:547)

at java.util.ArrayList.remove(ArrayList.java:387)

at Customer.subtract(Test.java:45)

at ThreadCustomer.run(Test.java:71)

at java.lang.Thread.run(Thread.java:662)

 

 

因生成之后,唤醒了全部等待的线程,结果所有的wait()后面的程序继续执行,进而出错。 

将if( ValueObj.list.size() == 0 )改为//while( ValueObj.list.size() == 0 )后正常。

例子(多个生产者消费者)

JAVA系列:Synchronized生产者 消费者例子

JAVA系列:Synchronized生产者 消费者例子

JAVA系列:Synchronized生产者 消费者例子 

JAVA系列:Synchronized生产者 消费者例子

生产完成通知,生产者:生产者A

生产完成通知,生产者:生产者B

生产完成通知,生产者:生产者C

消费完成通知,消费者3

消费完成通知,消费者1

消费完成通知,消费者2

生产完成通知,生产者:生产者A

生产完成通知,生产者:生产者B

生产完成通知,生产者:生产者C

生产完成通知,生产者:生产者A

生产完成通知,生产者:生产者B

消费完成通知,消费者3

消费完成通知,消费者2

生产完成通知,生产者:生产者C

消费完成通知,消费者1

.......

 

生产消费交替进行

JAVA系列:Synchronized生产者 消费者例子

JAVA系列:Synchronized生产者 消费者例子

 JAVA系列:Synchronized生产者 消费者例子

 

---backA---

---backB---

backA wiat

---backA---

backA wiat

backA wiat

---backB---

backA wiat

---backA---

backA wiat

backA wiat

---backB---

 

相关文章: