简单的通讯:  生产者、消费者问题public class CubbyHole {
    private int contents;
    private boolean available = false;
    public synchronized int get() {
        while (available == false) {
            try {
                // wait for Producer to put value
                wait();
            } catch (InterruptedException e) {   }
        }
        available = false;
        // notify Producer that value has been retrieved
        notifyAll();
        return contents;
    }
    public synchronized void put(int value) {
         while (available == true) {
            try {
                // wait for Consumer to get value
                wait();
            } catch (InterruptedException e) {  }
         }
        contents = value;
        available = true;
        // notify Consumer that value has been set
        notifyAll();
    } }
public class Producer extends Thread {
    private CubbyHole cubbyhole;
    private int number;    public Producer(CubbyHole c, int number) {
        cubbyhole = c;
        this.number = number;
    }    public void run() {
        for (int i = 0; i < 10; i++) {
            cubbyhole.put(i);
            System.out.println("Producer #" + this.number
                               + " put: " + i);
            try {
                sleep((int)(Math.random() * 100));
            } catch (InterruptedException e) { }
        }
    }
}
public class Consumer extends Thread {
    private CubbyHole cubbyhole;
    private int number;    public Consumer(CubbyHole c, int number) {
        cubbyhole = c;
        this.number = number;
    }    public void run() {
        int value = 0;
        for (int i = 0; i < 10; i++) {
            value = cubbyhole.get();
            System.out.println("Consumer #" + this.number
                               + " got: " + value);
        }
    }
}
public class ProducerConsumerTest {
    public static void main(String[] args) {
        CubbyHole c = new CubbyHole();
        Producer p1 = new Producer(c, 1);
        Consumer c1 = new Consumer(c, 1);        p1.start();
        c1.start();
    }
}
怎么样?没有用管道,也照样可以把需要的信息从一个Thread传给另外一个