package com.xmut.pm;
public class Test2 {
public static void main(String[] args) { A a = new A(); Produce pd = new Produce(a); Sale sl = new Sale(a); Thread t = new Thread(pd, "生产者"); Thread t1 = new Thread(sl, "消费者"); t.start(); t1.start(); try { Thread.sleep(5000); System.out.println("六点下班了"); System.exit(0); } catch (InterruptedException e) { e.printStackTrace(); } }
}
class A { int cp = 0;
public synchronized void produce() { cp++; System.out.println(Thread.currentThread().getName() + "生产了一个馒头"); System.out.println("现有的商品数量:" + cp); this.notifyAll(); }
public synchronized void sale() { try { Thread.sleep(200); cp--; System.out.println(Thread.currentThread().getName() + "销售一个馒头"); System.out.println("现有的商品数量:" + cp); this.notifyAll(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
public synchronized void waitforproduce() { while (cp <= 0) { try { System.out.println("等待生产中..........."); this.wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
public synchronized void waitforsale() { while (cp >= 5) { try { System.out.println("等待销售中..........."); this.wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
class Produce implements Runnable { A a;
public Produce(A a) { this.a = a; }
public void run() { while (true) {
a.waitforsale(); try { Thread.sleep(200); a.produce(); } catch (InterruptedException e) { e.printStackTrace(); }
} } }
class Sale implements Runnable { A a;
public Sale(A a) { this.a = a; }
@Override public void run() {
while (true) { a.waitforproduce(); try { Thread.sleep(200);
a.sale(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); }
} } }