很简单啊,就用这个Vector作锁,A在V上wait,B收集到数据后调用V的notifyall即可。

解决方案 »

  1.   

    import java.util.Vector;public class WaitDemo {
        public static void main(String[] args) {
            Vector goods = new Vector();
            Thread consumer = new Thread(new Consumer(goods));
            Thread producer = new Thread(new Producer(goods));
            
            consumer.start();
            producer.start();
        }
    }class Consumer implements Runnable {
        private Vector goods;
        
        public Consumer(Vector goods) {
            this.goods = goods;
        }
        
        public void run() {
            synchronized(goods) {
                while (true) {
                    try {
                        if (goods.size() == 0)
                            goods.wait();
                        System.out.println("Consumer: goods have been taken");
                        goods.clear();
                        goods.notify();
                    }
                    catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }class Producer implements Runnable {
        private Vector goods;
        
        public Producer(Vector goods) {
            this.goods = goods;
        }
        
        public void run() {
            synchronized(goods) {
                while (true) {
                    try {
                        if (goods.size() != 0) 
                            goods.wait();
                        goods.add(new String("apples"));
                        goods.notify();
                        System.out.println("Producer: goods are ready");
                        
                        Thread.sleep(500);
                    }
                    catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
      

  2.   

    伪代码:
    main() {
    Vector buf = new Vector();
    Object pc = new Object();
    A = new XXXX(buf,pc);
    B = new YYYY(buf,pc);
    A.start();
    B.start();
    }
    class XXXX {
    private Vector buf;
    Object t;
    public XXXX(Vector aa,Integer bb) { buf = aa; t = bb; }
    public void run() {
    while (true) {
    synchronized (t) {
    wait();
    处理buf;
    }
    }
    }
    class YYYY {
    private Vector buf;
    Object t;
    public YYYY(Vector aa,Integer bb) { buf = aa; t = bb; }
    public void run() {
    synchrionzed (t) {
    添加buf;
    notify();
    }
    }
    }