Java生产者和消费者问题

容器类Box.java
public class Box {
 private int num = 0; 
 public void put(){
  if(num==10){
   try {
    System.out.println("生产者被阻塞");
    this.wait();
    
   } catch (InterruptedException e) {
    e.printStackTrace();
   }
   return;
  }
  num++;
  System.out.println("生产了一个,现在有"+getNum()+"个");
  this.notify();
 }
 
 public void get(){
  if(num==0){
   try {
    System.out.println("消费者被阻塞");
    this.wait();
   } catch (InterruptedException e) {
    // TODO 自动生成 catch 块
    e.printStackTrace();
   }
   return;
  }
  num--;
  System.out.println("消费了一个,现在有"+getNum()+"个");
  this.notify();
 }
 
 public int getNum(){
  return num;
 }
}
生产者Producer.java
public class Producer implements Runnable{
 public Box box;
 public int name;
 
 public Producer(Box box,int name){
  this.box = box;
  this.name = name;
 }
 
 public void run() {
  // TODO 自动生成方法存根
  while(true){
   try{
    Thread.sleep(2000);
    synchronized(box){
     box.put();
    }
    
   }catch(Exception e){
    e.printStackTrace();
   }
  }
  
 } 
}

消费者Consumer.java
public class Consumer implements Runnable{
 public Box box;
 public int name;
 
 public Consumer(Box box,int name){
  this.box = box;
  this.name = name;
 }
 
 public void run() {
  while(true){
   try{
    Thread.sleep(3000);
    synchronized(box){
     box.get();
    }    
   }catch(Exception e){
    e.printStackTrace();
   }
  }
  
 }
}
运行测试类Main.java
public class Main {
 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO 自动生成方法存根
  Box b = new Box();
  Producer p1 = new Producer(b,1);
  Producer p2 = new Producer(b,2);
  Producer p3 = new Producer(b,3);
  
  Consumer c1 = new Consumer(b,1);
  Consumer c2 = new Consumer(b,2);
  Consumer c3 = new Consumer(b,3);
  
  
  new Thread(p1).start();
  new Thread(p2).start();
  new Thread(p3).start();
  new Thread(c1).start();
  new Thread(c2).start();
  new Thread(c3).start();
 }
}容器类Box.java
public class Box {
 private int num = 0; 
 public void put(){
  if(num==10){
   try {
    System.out.println("生产者被阻塞");
    this.wait();
    
   } catch (InterruptedException e) {
    e.printStackTrace();
   }
   return;
  }
  num++;
  System.out.println("生产了一个,现在有"+getNum()+"个");
  this.notify();
 }
 
 public void get(){
  if(num==0){
   try {
    System.out.println("消费者被阻塞");
    this.wait();
   } catch (InterruptedException e) {
    // TODO 自动生成 catch 块
    e.printStackTrace();
   }
   return;
  }
  num--;
  System.out.println("消费了一个,现在有"+getNum()+"个");
  this.notify();
 }
 
 public int getNum(){
  return num;
 }
}
生产者Producer.java
public class Producer implements Runnable{
 public Box box;
 public int name;
 
 public Producer(Box box,int name){
  this.box = box;
  this.name = name;
 }
 
 public void run() {
  // TODO 自动生成方法存根
  while(true){
   try{
    Thread.sleep(2000);
    synchronized(box){
     box.put();
    }
    
   }catch(Exception e){
    e.printStackTrace();
   }
  }
  
 } 
}

消费者Consumer.java
public class Consumer implements Runnable{
 public Box box;
 public int name;
 
 public Consumer(Box box,int name){
  this.box = box;
  this.name = name;
 }
 
 public void run() {
  while(true){
   try{
    Thread.sleep(3000);
    synchronized(box){
     box.get();
    }    
   }catch(Exception e){
    e.printStackTrace();
   }
  }
  
 }
}
运行测试类Main.java
public class Main {
 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO 自动生成方法存根
  Box b = new Box();
  Producer p1 = new Producer(b,1);
  Producer p2 = new Producer(b,2);
  Producer p3 = new Producer(b,3);
  
  Consumer c1 = new Consumer(b,1);
  Consumer c2 = new Consumer(b,2);
  Consumer c3 = new Consumer(b,3);
  
  
  new Thread(p1).start();
  new Thread(p2).start();
  new Thread(p3).start();
  new Thread(c1).start();
  new Thread(c2).start();
  new Thread(c3).start();
 }
}

 

原文地址:http://user.qzone.qq.com/372806800/blog/1336197812

posted @ 2016-12-23 14:07  风来风往风伤(TiAmo)  阅读(261)  评论(0编辑  收藏  举报