【第06个代码模型】综合案例:生产者与消费者(基础模型)
一、生产者和消费者基础模型
生产者和消费者是一个供求案例,供求案例:provider、consumer。在进行分布式的结构开发中都会被大量采用。
示例:
假设生产者只生产数据,而生产者每生成一个完整的数据,消费者就要把这些数据取走。
假设要生产如下数据:
title = 老李 , note = 是个好人
title = 民族败类 , note = 老方B
结构示意图:
编写程序的基础模型:
public static void main(String[] args)throws Exception{
Data data = new Data();
new Thread(new DataProvider(data)).start();
new Thread(new DataConsumeer(data)).start();
}
}
class DataProvider implements Runnable {
private Data date;
public DataProvider(Data data){
this.data = data;
}
@Override
public void run(){
for(int x = 0;x<50;x++) {
if(x % 2==0){
this.data.setTitle(“老李”);
try{
Thread.sleep(1000);
}catch(InterruptedException e){
e.printStackTrace();
}
this.data.setNote(“是个好人“);
}else{
this.data.setTitle(“民族败类”);
try{
Thread.sleep(1000);
}catch(InterruptedException e){
e.printStackTrace();
}
this.data.setNote(“老方B”);
}
}
}
}
class DateConsumer implements Runnable{
private Data data ;
public DataConsumer(Data data) {
this.data = data;
}
public void run(){
for(int x = 0;x<50;x++){
try{
Thread.sleep(1000);
}catch(InterruptedException e){
e.printStackTrace();
}
System.out.println(this.data.getTitle()+”=”+this.data.getNote());
}
}
}
class Date { //负责数据保存
private String title ;
private String note ;
public void setNote(String note){
this.note = note;
}
public void setTitle(String title) {
this.title = title;
}
public String getNote(){
return note;
}
public String getTitle(){
return title;
}
}
程序中会出现的两类问题:
1.数据不完整
2.数据的重复操作问题(重复设置或重复取出)