Java實現同步機制(生產者消費者)

來源:互聯網
上載者:User

Java實現線程的同步,可以通過synchronized,wait(), notitfy(), notifyAll();假設一個線程(生產者)生產產品,一個線程(消費者)消費產品,其訪問的資源時間都是隨機的,這樣就是生產者必須得產品(資源)消費完成之後才可以生產,而消費者必須在產品有的時候才可以消費,這就是必須對資源進行同步操作,對資源的使用部分的代碼需要加入鎖。

下列是我的實現方法:

    package com.lzb.common;                import java.util.Random;        import java.util.concurrent.TimeUnit;        /**       *        * 功能描述:生產者消費者       *          註:鎖synhronized是放在“資源的類的內部方法中”,而不是線上程的代碼中       */        public class ProducterCustomer {                        private PCResource pc = new PCResource();            // 生產者與消費者調用的時間隨機            private Random rand = new Random(50);                        public void init() {                        // 生產者                new Thread(new Runnable(){                            public void run() {                                     while(true) {                            pc.producter();                            try {                                TimeUnit.MILLISECONDS.sleep(rand.nextInt(1000));                            } catch (InterruptedException e) {                                e.printStackTrace();                            }                        }                                            }}).start();                            // 消費者                new Thread(new Runnable(){                            public void run() {                        while(true) {                            pc.customer();                            try {                                TimeUnit.MILLISECONDS.sleep(rand.nextInt(1000));                            } catch (InterruptedException e) {                                e.printStackTrace();                            }                        }                    }}).start();            }                        public static void main(String[] args) {                                ProducterCustomer startPc = new ProducterCustomer();                startPc.init();            }               }                /**       *        * 功能描述:同步資源       *       */        class PCResource {                        private static final Integer MAX = 1;            private static final Integer MIN = 0;            private int product = 0;            // 同步互斥通訊標誌            private boolean isRunning = true;                        /**           *            * 功能描述:生產產品,當生產一個商品後掛起,等待消費者消費完成           */            public synchronized void producter() {                                while(isRunning) {                    try {                        wait();                    } catch (InterruptedException e) {                        e.printStackTrace();                    }                    product++;                    System.out.println("-------->Product " + product + " good");                    if(product >= MAX)                        break;                }                isRunning = false;                notify();            }                        /**           *            * 功能描述:消費者,消費產品,當產品為0時,等待生產者生產產品           */            public synchronized void customer() {                                while(!isRunning) {                    try {                        wait();                    } catch (InterruptedException e) {                        e.printStackTrace();                    }                    product--;                    System.out.println("Limit " + product + " goods<----------");                    if(product <= MIN) {                        break;                    }                }                isRunning = true;                notify();            }        }    
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.