Java中消費者問題的程式碼分析

來源:互聯網
上載者:User
本篇文章給大家帶來的內容是關於Java中消費者問題的程式碼分析,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所協助。

1.資源

public class Resource {    //當前資源的數量    int num = 0;    //當前資源的上限    int size = 10;    //消費資源    public synchronized void remove() {        //如果num為0,沒有資源了,需要等待        while (num == 0) {            try {                System.out.println("消費者進入等待");                this.wait();            } catch (InterruptedException e) {                e.printStackTrace();            }        }        //如果線程可以執行到這裡,說明資源裡有資源可以消費        num--;        System.out.println("消費者線程為:" + Thread.currentThread().getName() + "--資源數量:" + num);        this.notifyAll();    }    //生產資源    public synchronized void put() {        //如果資源滿了,就進入阻塞狀態        while (num == size) {            try {                System.out.println("生產者進入等待");                this.wait();            } catch (InterruptedException e) {                e.printStackTrace();            }        }        num++;        System.out.println("生產者線程為:" + Thread.currentThread().getName() + "--資源數量:" + num);        this.notifyAll();    }}

2.消費者

public class Consumer implements Runnable {    private Resource resource;    public Consumer(Resource resource) {        this.resource = resource;    }    @Override    public void run() {        while (true){            resource.remove();        }    }}

3.生產者

public class Producer implements Runnable {    private Resource resource;    public Producer(Resource resource){        this.resource=resource;    }    @Override    public void run() {        while (true){            resource.put();        }    }}

4.測試

public class TestConsumerAndProducer {    public static void main(String[] args) {        Resource resource = new Resource();        //生產線程        Producer p1 = new Producer(resource);        //消費線程        Consumer c1 = new Consumer(resource);        new Thread(p1).start();        new Thread(c1).start();    }}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.