zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    高并发网络编程之epoll详解
    位操作实现加减乘除四则运算
    堆和栈的区别
    IT思想类智力题
    C/C++基础总结
    数据库总结
    面试网络总结
    Windows内存管理和linux内存管理
    面试操作系统总结
    数据结构与算法
  • 原文地址:https://www.cnblogs.com/amwuau/p/6214596.html
Copyright © 2011-2022 走看看