目录
引子(一个生产者消费者)
例子(多个生产者消费者)
生产消费交替进行
删除准备取数消费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 )后正常。
生产完成通知,生产者:生产者A
生产完成通知,生产者:生产者B
生产完成通知,生产者:生产者C
消费完成通知,消费者3
消费完成通知,消费者1
消费完成通知,消费者2
生产完成通知,生产者:生产者A
生产完成通知,生产者:生产者B
生产完成通知,生产者:生产者C
生产完成通知,生产者:生产者A
生产完成通知,生产者:生产者B
消费完成通知,消费者3
消费完成通知,消费者2
生产完成通知,生产者:生产者C
消费完成通知,消费者1
.......
---backA---
---backB---
backA wiat
---backA---
backA wiat
backA wiat
---backB---
backA wiat
---backA---
backA wiat
backA wiat
---backB---
