 package com.gcoresoft.homework.consumerproducer;
package com.gcoresoft.homework.consumerproducer;


 public class Test
public class Test  {
{


 /** *//**
    /** *//**
 * @param args
     * @param args
 */
     */

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

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

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

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

 
         {
{
 consumers[i].start();
            consumers[i].start();
 }
        }        
 }
    }

 }
}

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


 public class Consumers extends Thread
public class Consumers extends Thread {
{

 private final int ID;
    private final int ID;
 private Products pros;
    private Products pros;
 
    
 
    
 public Consumers(Products pros, int ID)
    public Consumers(Products pros, int ID)

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

 
     {
{
 this.pros=pros;
        this.pros=pros;
 }
    }
 
    
 public void run()
    public void run()

 
     {
{
 for(int i=0;i<100;i++)
        for(int i=0;i<100;i++)

 
         {
{
 System.out.println("Consumer "+ ID +"消费了"+pros.get());
            System.out.println("Consumer "+ ID +"消费了"+pros.get());
 try
            try

 
             {
{
 sleep((int)(Math.random()*2000));
                sleep((int)(Math.random()*2000));

 }catch(Exception e)
            }catch(Exception e) {
{
 //e.printStackTrace();
                //e.printStackTrace();
 System.out.println("Exception in Consumer "+ID);
                System.out.println("Exception in Consumer "+ID);
 }
            }
 }
        }
 }
    }
 }
}

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


 public class Producers extends Thread
public class Producers extends Thread  {
{

 private Products pros;
    private Products pros;
 private final int ID;
    private final int ID;
 private int num=0;
    private int num=0;
 
    
 public Producers(Products pros, int ID, int num)
    public Producers(Products pros, int ID, int num)

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

 
     {
{
 this.pros=pros;
        this.pros=pros;
 }
    }

 public void setProductsNum(int num)
    public void setProductsNum(int num)

 
     {
{
 this.num=num;
        this.num=num;
 }
    }
 
    
 public void run()
    public void run()

 
     {
{
 for(int i=0;i<num;i++)
        for(int i=0;i<num;i++)

 
         {
{
 pros.add(ID*10+i);
            pros.add(ID*10+i);
 System.out.println("Producer "+ ID +"生产了"+(ID*10+i));
            System.out.println("Producer "+ ID +"生产了"+(ID*10+i));
 try
            try

 
             {
{
 sleep((int)(Math.random()*2000));
                sleep((int)(Math.random()*2000));

 }catch(Exception e)
            }catch(Exception e) {
{
 //e.printStackTrace();
                //e.printStackTrace();
 System.out.println("Exception in Producer "+ID);
                System.out.println("Exception in Producer "+ID);
 }
            }
 }
        }
 }
    }
 
    
 
    
 }
}

产品
 package com.gcoresoft.homework.consumerproducer;
package com.gcoresoft.homework.consumerproducer;


 public class Products
public class Products  {
{

 private static int count;
    private static int count;
 private static int num;
    private static int num;
 private static int[] products;
    private static int[] products;
 
    

 /** *//**
    /** *//**
 * @param args
     * @param args
 */
     */

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

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

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

 
     {
{
 this.num=num;
        this.num=num;
 products=new int[num];
        products=new int[num];
 count=0;
        count=0;
 }
    }    

 public synchronized void add(int i)
    public synchronized void add(int i)

 
     {
{
 while(isFull())
        while(isFull())

 try
            try  {
{
 wait();
                wait();

 } catch (InterruptedException e)
            } catch (InterruptedException e)  {
{
 // TODO Auto-generated catch block
                // TODO Auto-generated catch block
 e.printStackTrace();
                e.printStackTrace();
 }
            }
 products[count++]=i;
        products[count++]=i;
 //System.out.println("count:"+(count-1));
        //System.out.println("count:"+(count-1));
 notify();
        notify();
 }
    }
 
    
 private boolean isFull()
    private boolean isFull()

 
     {
{
 return count==num;
        return count==num;
 }
    }
 
    
 public synchronized int get()
    public synchronized int get()

 
     {
{
 while(isEmpty())
        while(isEmpty())

 try
            try  {
{
 wait();
                wait();

 } catch (InterruptedException e)
            } catch (InterruptedException e)  {
{
 // TODO Auto-generated catch block
                // TODO Auto-generated catch block
 e.printStackTrace();
                e.printStackTrace();
 }
            }
 notify();
        notify();
 //System.out.println("count:"+count);
        //System.out.println("count:"+count);
 return products[--count];
        return products[--count];
 }
    }
 
    
 private boolean isEmpty()
    private boolean isEmpty()

 
     {
{
 return count==0;
        return count==0;
 }
    }
 
    

 }
}

测试
---------------------------------------------------------
专注移动开发
Android, Windows Mobile, iPhone, J2ME, BlackBerry, Symbian
	
posted on 2007-04-12 14:51 
TiGERTiAN 阅读(920) 
评论(0)  编辑  收藏  所属分类: 
Java