隨筆-348  評論-598  文章-0  trackbacks-0
          package com.gcoresoft.homework.consumerproducer;

          public class Test {

              
          /**
               * 
          @param args
               
          */

              
          public static void main(String[] args) {
                  
          // TODO Auto-generated method stub
                  Products pros=new Products();
                  
                  Producers[] producers
          =new Producers[5];
                  
          for(int i=0;i<producers.length;i++)
                  
          {
                      producers[i]
          =new Producers(pros, i, 5);
                  }

                  
                  Consumers[] consumers
          =new Consumers[2];
                  
          for(int i=0;i<consumers.length;i++)
                  
          {
                      consumers[i]
          =new Consumers(pros, i);
                  }

                  
                  
          for(int i=0;i<producers.length;i++)
                  
          {
                      producers[i].start();
                  }

                  
                  
          for(int i=0;i<consumers.length;i++)
                  
          {
                      consumers[i].start();
                  }
                  
              }


          }

          消費者
          package com.gcoresoft.homework.consumerproducer;

          public class Consumers extends Thread{

              
          private final int ID;
              
          private Products pros;
              
              
              
          public Consumers(Products pros, int ID)
              
          {
                  
          this.ID=ID;
                  setProducts(pros);
              }

              
              
          public void setProducts(Products pros)
              
          {
                  
          this.pros=pros;
              }

              
              
          public void run()
              
          {
                  
          for(int i=0;i<100;i++)
                  
          {
                      System.out.println(
          "Consumer "+ ID +"消費了"+pros.get());
                      
          try
                      
          {
                          sleep((
          int)(Math.random()*2000));
                      }
          catch(Exception e){
                          
          //e.printStackTrace();
                          System.out.println("Exception in Consumer "+ID);
                      }

                  }

              }

          }


          生產者
          package com.gcoresoft.homework.consumerproducer;

          public class Producers extends Thread {

              
          private Products pros;
              
          private final int ID;
              
          private int num=0;
              
              
          public Producers(Products pros, int ID, int num)
              
          {    
                  
          this.ID=ID;
                  setProductsNum(num);
                  setProducts(pros);
              }

              
              
          public void setProducts(Products pros)
              
          {
                  
          this.pros=pros;
              }


              
          public void setProductsNum(int num)
              
          {
                  
          this.num=num;
              }

              
              
          public void run()
              
          {
                  
          for(int i=0;i<num;i++)
                  
          {
                      pros.add(ID
          *10+i);
                      System.out.println(
          "Producer "+ ID +"生產了"+(ID*10+i));
                      
          try
                      
          {
                          sleep((
          int)(Math.random()*2000));
                      }
          catch(Exception e){
                          
          //e.printStackTrace();
                          System.out.println("Exception in Producer "+ID);
                      }

                  }

              }

              
              
          }


          產品
          package com.gcoresoft.homework.consumerproducer;

          public class Products {

              
          private static int count;
              
          private static int num;
              
          private static int[] products;
              
              
          /**
               * 
          @param args
               
          */

              
          public static void main(String[] args) {
                  
          // TODO Auto-generated method stub
                  Products pros=new Products(200);
                  
          for(int i=0;i<1000;i++)
                      pros.add(i);
                  
          for(int i=0;i<200;i++)
                      System.out.println(
          "get:"+pros.get());
              }

              
              
          public Products()
              
          {
                  setMaxNum(
          100);
              }

              
              
          public Products(int num)
              
          {
                  setMaxNum(num);
              }

              
              
          public void setMaxNum(int num)
              
          {
                  
          this.num=num;
                  products
          =new int[num];
                  count
          =0;
              }
              

              
          public synchronized void add(int i)
              
          {
                  
          while(isFull())
                      
          try {
                          wait();
                      }
           catch (InterruptedException e) {
                          
          // TODO Auto-generated catch block
                          e.printStackTrace();
                      }

                  products[count
          ++]=i;
                  
          //System.out.println("count:"+(count-1));
                  notify();
              }

              
              
          private boolean isFull()
              
          {
                  
          return count==num;
              }

              
              
          public synchronized int get()
              
          {
                  
          while(isEmpty())
                      
          try {
                          wait();
                      }
           catch (InterruptedException e) {
                          
          // TODO Auto-generated catch block
                          e.printStackTrace();
                      }

                  notify();
                  
          //System.out.println("count:"+count);
                  return products[--count];
              }

              
              
          private boolean isEmpty()
              
          {
                  
          return count==0;
              }

              

          }


          測試


          ---------------------------------------------------------
          專注移動開發

          Android, Windows Mobile, iPhone, J2ME, BlackBerry, Symbian
          posted on 2007-04-12 14:51 TiGERTiAN 閱讀(913) 評論(0)  編輯  收藏 所屬分類: Java
          主站蜘蛛池模板: 南投县| 木里| 克山县| 昭平县| 徐汇区| 青州市| 岑巩县| 石景山区| 和林格尔县| 巧家县| 溆浦县| 潍坊市| 遂宁市| 南昌县| 池州市| 乌鲁木齐县| 阿坝| 东明县| 温宿县| 淮滨县| 太原市| 重庆市| 绥滨县| 景洪市| 五台县| 慈利县| 墨江| 莱西市| 乌苏市| 峨边| 芜湖县| 嘉禾县| 孟津县| 黄梅县| 河南省| 万载县| 香河县| 介休市| 基隆市| 钦州市| 建平县|