Java 线程入门——线程的同步

类别:Java 点击:0 评论:0 推荐:

//可以尝试把下面的关键字synchronized去掉。

public class CubbyHole {

    private int contents;

    private boolean available = false;

    public synchronized int get() {

       while (available == false) {

           try {

               wait();

           } catch (InterruptedException e) {

           }

       }

        available = false;

        notifyAll();

        return contents;

    }

    public synchronized void put(int value) {

       while (available == true) {

           try {

               wait();

           } catch (InterruptedException e) {

           }

       }

        contents = value;

        available = true;

        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();

    }

}




本文地址:http://com.8s8s.com/it/it14519.htm