64java综合案例:生产者与消费者(基础模型)

60 阅读1分钟

【第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.数据的重复操作问题(重复设置或重复取出)