接上一篇的线程同步问题,这一篇是上一篇的应用,
要实现一个生产-消费者模型,首先,分析它的组成:生产者(producer类),消费者(consumer类),还有一个它们两共享的资源;
一开始我想的是在创建一个资源库类,但其实没必要,直接在producer和consumer两个类共享一个list对象即可!这样既可以使producer和consumer共同访问,又可以实现同步的对象唯一性。
然后是它们之间的联系,由于这个模型要实现,生产者不断地向资源库中生产资源,消费者不断地消耗资源,同时值得注意的是,资源库资源不能小于0,也不能超过最大容量;
那么这就要求,生产者和消费者两个线程需要同步,从而在资源要小于0时让消费者进入等待,资源要溢出时让生产者进入等待。
等待状态就是通过wait()方法实现,wait()调用即会让当前线程进入等待状态。
既然让它们等待,那么该在何时将它们唤醒呢?
其实,只要在每一次消费后都唤醒就可以,因为notify()会随机地唤醒一个持有相同锁的等待wait线程,如果没有wait线程则会自动忽略。
producer类代码如下,注意在同步代码块中进行生产等活动
consumer类也类似
最后,在主函数中创建几个生产者线程和几个消费者线程,生产-消费模型就实现了