多线程(生产者,消费者)的简单实现

package com.lzg;
public class ThreadDemo02 {
 public static void main(String[] args) {
  Resource resource = new Resource();
  Thread p1 = new Thread(new Producer("生产者1 ", 50, resource));
  Thread p2 = new Thread(new Producer("生产者2 ", 30, resource));
  Thread c1 = new Thread(new Custormer("消费者1 ", 50, resource));
  Thread c2 = new Thread(new Custormer("消费者2 ", 30, resource));
  p1.start();
  p2.start();
  c1.start();
  c2.start();
 }
}
class Resource {
 public static final int MAX_SIZE = 100;
 private int current_size = 0;
 public int getCurrent_size() {
  return current_size;
 }
 public void setCurrent_size(int current_size) {
  this.current_size = current_size;
 }
 public synchronized void produrce(int num, String name) {
  System.out.println("当前仓库剩余容量: " + (Resource.MAX_SIZE - current_size) + "----------" + name + "准备生产: " + num);
  while (current_size + num > Resource.MAX_SIZE) // 超过最大容量
  {
   try {
    System.out.println("仓库存不下,请等待");
    wait();
   } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  }
  current_size += num;
  System.out.println(name + "生产了 : " + num + "个产品-------------------" + "当前仓库剩余容量为"
    + (Resource.MAX_SIZE - current_size));
  notify();
 }
 public synchronized void consume(int num, String name) {
  System.out.println("当前仓库剩余产品: " + current_size + "********" + name + " 准备消费: " + num);
  while (current_size < num) {
   try {
    System.out.println("仓库没货,请等待");
    wait();
   } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  }
  current_size -= num;
  System.out.println(name + "已经消费: " + num + "************ 当前仓库剩余产品: " + current_size);
  notify();
 }
}
class Producer implements Runnable {
 private Resource r;
 private String name;
 private int num;
 public Producer(String name, int num, Resource r) {
  this.name = name;
  this.num = num;
  this.r = r;
 }
 @Override
 public void run() {
  // TODO Auto-generated method stub
  int i = 0;
  while (i++ < 10) {
   r.produrce(num, name);
  }
 }
}
class Custormer implements Runnable {
 private Resource r;
 private String name;
 private int num;
 public Custormer(String name, int num, Resource r) {
  this.name = name;
  this.num = num;
  this.r = r;
 }
 @Override
 public void run() {
  // TODO Auto-generated method stub
  int i = 0;
  while (i++ < 10) {
   r.consume(num, name);
  }
 }
}
相关文章
相关标签/搜索