磨砺营|马剑威|Android一、引入生产者将产品交给店员,而消费者从店员处取走产品,店员一次只能持有固定数量的产品:如果生产者生产了过多的产品,店员叫生产者等一下;如果店中有空位放产品了再通知生产者继续生产;如果店中没有产品了,店员会告诉消费者等一下;如果店中有产品了再通知消费者来取走产品。二、方法1线程等待:◦Object类中的wait()throwsInterruptedException方法,导致当前的线程等待,直到其他线程调用此对象的notify()方法或notifyAll()唤醒方法。2线程唤醒:◦Object类中的notify()方法,唤醒在此对象监视器上等待的单个线程。如果所有线程都在此对象上等待,则会选择唤醒其中一个线程。选择是任意性的。◦Object类中的notifyAll()方法,唤醒在此对象监视器上等待的所有线程。注意:这三个方法只能在被同步化(synchronized)的方法或代码块中调用实例操作我们若要在java中实现生产者消费者模型,那么就得创建以下角色:1.店铺类(商店,仓库,数据仓库类)一般都是一个普通类充当,该类可以定义一些属性如存储数据的集合、当前处理的最大数据个数等该类提供2个同步方法一个用于生产数据的,让生产者线程调用另一个用于消耗数据的,让消费者线程调用packageorg.qianfeng.demo;importjava.util.ArrayList;/***生产者消费者模型*数据仓库类:用于存储数据的类*并且提供同步的生成数据和获取数据的方法*我们用来模拟新闻消息的抓取的显示*/publicclassDataStore{privateintMAX=10;//最大的数据数量privateArrayList
list;//存储数据的集合对象privateintno;//数据编号publicDataStore(){list=newArrayList();//实例化集合对象}/***生成数据的方法*让生产者线程调用*/publicsynchronizedvoidcreateData(){//说明当前数据已经为了最大容量if(list.size()==MAX){try{System.out.println(\"当前数据已经为最大容量,请稍后再生成数据,生产者线程等待\");wait();//如果当前的数量为}catch(InterruptedExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}}else{//循环生成数据for(inti=list.size();i