生產者/消費者 Java例子

public class ThreadConsumerProducter {
      
    public static void main(String[] args) {
        Clerk clerk = new Clerk();

        Consumer consumer = new Consumer(clerk);
        Producer producer = new Producer(clerk);

        consumer.setName("消費者1");
        producer.setName("生產者1");

        consumer.start();
        producer.start();
    }
}


//消費者
class Consumer extends Thread {

    private Clerk clerk;

    public Consumer(Clerk clerk) {
        this.clerk = clerk;
    }

    @Override
    public void run() {
        while (true) {
            clerk.consumption();
        }
    }
}

//生產者
class Producer extends Thread {
    private Clerk clerk;

    public Producer(Clerk clerk) {
        this.clerk = clerk;
    }

    @Override
    public void run() {
        while (true) {
            try {
                Thread.sleep(10);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            clerk.produce();
        }
    }
}

//店員
class Clerk {
    private int count = 0;

    public synchronized void produce() {
        //小於20,生產就完了
        if (count < 20) {
            count++;
            System.out.println(Thread.currentThread().getName() + "生產第" + count + "個產品");
            notify();
        } else {
            //等於20
            try {
                wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    public synchronized void consumption() {
        //小於20,生產就完了
        if (count > 0) {
            count--;
            System.out.println(Thread.currentThread().getName() + "消費第" + count + "個產品");
            notify();
        } else {
            //等於0
            try {
                wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章