package com.cwcec.test; class Resource { private int count = 0; private boolean flag = false; public synchronized void set(int count) { if(flag) { try { this.wait(); } catch (InterruptedException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } } this.count = count; flag = true; System.out.println(Thread.currentThread().getName() + "...生产者..." + count); this.notify(); } public synchronized void out() { if(!flag) { try { this.wait(); } catch (InterruptedException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } } System.out.println(Thread.currentThread().getName() + "...消费者..." + count); flag = false; this.notify(); } } class Producer implements Runnable { private Resource r; public Producer(Resource r) { this.r = r; } public void run() { int x = 0; while(true) { r.set( ++x); } } } class Customer implements Runnable { Resource r; public Customer(Resource r) { this.r = r; } public void run() { while(true) { r.out(); } } } public class Person { public static void main(String[] args) { // TODO 自动生成的方法存根 Resource r = new Resource(); Producer p = new Producer(r); Customer c = new Customer(r); Thread t1 = new Thread(p); Thread t2 = new Thread(c); t1.start(); t2.start(); } }
Output:
Thread-0...生产者...61498
Thread-1...消费者...61498
Thread-0...生产者...61499
Thread-1...消费者...61499
Thread-0...生产者...61500
Thread-1...消费者...61500
Thread-0...生产者...61501
Thread-1...消费者...61501
Thread-0...生产者...61502
Thread-1...消费者...61502
Thread-0...生产者...61503
Thread-1...消费者...61503