<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    一種實現生產者-消費者問題的新方法

    生產者-消費者問題,是操作系統的進程管理中很重要的問題。以前的我都是用wait(),notify()方法來實現的。今天我在翻閱JDK1.5API幫助文檔的時候,偶然間發現了一個類ArrayBlockingQueue,它其中提供了以下兩個方法:

    void put (E o)
              Adds the specified element to the tail of this queue, waiting if necessary for space to become available.
     E take()
              Retrieves and removes the head of this queue, waiting if no elements are present on this queue.


    我靈機一動,用這兩個JDK中定義好的方法是不是也可以實現生產者-消費者問題呢?試了一下,嘿,還真靈。

    /*
     *@author 我為J狂 建立日期 2007-3-25
     *
     
    */

    package net.blogjava.lzqdiy;

    import java.util.concurrent.ArrayBlockingQueue;

    public class TestUtil
    {
        
    private ArrayBlockingQueue<String> queue ;

        
    /**
         * 
    @param args
         
    */

        
    public TestUtil(int capacity)
        
    {
            queue 
    = new ArrayBlockingQueue<String>(capacity);
        }

        
    class Consumer extends Thread
        
    {

            @Override
            
    public void run()
            
    {
                
    // TODO Auto-generated method stub
                while (true)
                
    {
                    
    synchronized (queue)
                    
    {
                        
    try
                        
    {
                            System.out.println(
    "take:" + queue.take());
                            Thread.sleep(
    5);
                        }
     catch (InterruptedException e)
                        
    {
                            
    // TODO Auto-generated catch block
                            e.printStackTrace();
                        }

                    }

                }

            }

        }


        
    class Producer extends Thread
        
    {

            
    private int i;
            @Override
            
    public void run()
            
    {
                
    // TODO Auto-generated method stub
                while (true)
                
    {
                    
    synchronized (queue)
                    
    {
                        
    try
                        
    {
                            queue.put((
    ++i) + "");
                            System.out.println(
    "put:" + i);
                            Thread.sleep(
    1);
                        }
     catch (InterruptedException e)
                        
    {
                            
    // TODO Auto-generated catch block
                            e.printStackTrace();
                        }

                    }

                }

            }

        }


        
    public static void main(String[] args)
        
    {
            TestUtil t 
    = new TestUtil(10);//阻塞隊列的容量為10
            TestUtil.Producer p = t.new Producer();
            p.start();
            
            TestUtil.Consumer c 
    = t.new Consumer();
            c.start();
        }

    }

    這個算法有點小BUG,就是當隊列容量過小時,有可能發生死鎖。希望大家留言,來改進這個算法。

    posted on 2007-03-25 14:17 我為J狂 閱讀(2058) 評論(3)  編輯  收藏 所屬分類: 線程

    評論

    # re: 一種實現生產者-消費者問題的新方法。 2007-03-25 15:05 dennis

    jdk5引入的concurrent包,了解太少,這方面的學習資料也少  回復  更多評論   

    # re: 一種實現生產者-消費者問題的新方法 2007-05-08 22:04 www.bushiba.com

    不懂哦,只知道老師要寫偶寫出來  回復  更多評論   

    # re: 一種實現生產者-消費者問題的新方法 2008-08-07 11:07 pei

    用了BlockingQueue還要synchronized嗎?  回復  更多評論   


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    <2007年3月>
    25262728123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    導航

    統計

    常用鏈接

    留言簿(11)

    隨筆分類(48)

    文章分類(29)

    常去逛逛

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 国产最新凸凹视频免费| 亚洲国产人成精品| 久久久久久久久免费看无码| 成人免费男女视频网站慢动作| 免费a级毛片大学生免费观看| 亚洲日本乱码在线观看| 亚洲av无码不卡久久| 看一级毛片免费观看视频| a毛片在线免费观看| 久久久久国色AV免费看图片| 亚洲伦理中文字幕| 日本高清不卡aⅴ免费网站| 成人黄动漫画免费网站视频| 2020天堂在线亚洲精品专区| 最好免费观看韩国+日本| 日韩免费电影在线观看| 青青青亚洲精品国产| 1000部免费啪啪十八未年禁止观看 | 亚洲精品视频在线播放| 亚洲AV无码一区二区大桥未久| 99久久精品毛片免费播放| 亚洲AV无码AV男人的天堂| 粉色视频成年免费人15次| 奇米影视亚洲春色| 国产精品观看在线亚洲人成网| 亚洲精品无码专区2| 久久久精品免费国产四虎| 亚洲麻豆精品国偷自产在线91| baoyu116.永久免费视频| 亚洲啪啪免费视频| 免费无码VA一区二区三区| 久久久久久亚洲精品不卡| 日韩亚洲综合精品国产| 亚洲国产精品成人精品无码区在线| 高潮毛片无遮挡高清免费视频| 日韩一区二区在线免费观看| 久久精品无码免费不卡| 亚洲综合另类小说色区| 国产va精品免费观看| 亚洲人成片在线观看| 免费一级特黄特色大片在线|