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); } } }