日期:2014-05-20 浏览次数:20947 次
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class Queue {
    List<Integer> Integers = new ArrayList<Integer>();
    int maxSize = 4;
    int count = 0;
    public Queue() {
    }
    public synchronized void add(Integer e) {
        if (Integers.size() == maxSize) {
            try {
                this.wait();
            } catch (InterruptedException e1) {
                e1.printStackTrace();
            }
        }
        this.notifyAll();
        if (Integers.size() < maxSize) {
            System.out.println(Thread.currentThread().getName() + " " + e);
            Integers.add(e);
            count++;
        }
    }
    public synchronized void remove() {
        if (Integers.size() == 0) {
            try {
                this.wait();
            } catch (InterruptedException e1) {
                e1.printStackTrace();
            }
        }
        this.notifyAll();
        if (Integers.size() > 0) {
            System.out.println(Thread.currentThread().getName() + " "
                    + this.Integers.get(0));
            Integers.remove(0);
        }
    }
    public static void main(String args[]) {
        Queue q = new Queue();
        Create c = new Create(q);
        PullOut po = new PullOut(q);
        new Thread(c).start();
        new Thread(po).start();
    }
}
class Create implements Runnable {
    String name = "生产者";
    private Queue q;
    public Create(Queue q) {
        this.q = q;
    }
    @Override
    public void run() {
        int count = 0;
        Random r = new Random();
        while (count < 10) {
            int number = r.nextInt() % 20;
            q.add(number);
            try {
                Thread.sleep(300);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            count++;
        }
    }
}
class PullOut implements Runnable {
    String name = "消费者";
    private Queue q;
    public PullOut(Queue q) {
        this.q = q;
    }
    @Override
    public void run() {
        int count = 0;
        while (count < 10) {
            q.remove();
            try {
                Thread.sleep(800);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            count++;
        }
    }
}