全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

JAVA多线程实现生产者消费者的实例详解

JAVA多线程实现生产者消费者的实例详解

下面的代码实现了生产者消费者的问题

Product.Java

package consumerProducer; 
 
public class Product { 
private String id; 
 
public String getId() { 
  return id; 
} 
 
public void setId(String id) { 
  this.id = id; 
} 
public Product(String id) 
{ 
  this.id=id; 
 
} 
public String toString() 
{ 
  return "product "+id;   
 
} 
 
} 

Pool.java

package consumerProducer; 
import java.util.*; 
public class Pool { 
private int number=0; 
 
private List<Product>products=new LinkedList<Product>(); 
 
 
public int getNumber() { 
  return number; 
} 
public void setNumber(int number) { 
  this.number = number; 
} 
public synchronized Product consumeProduct(){  //可以去掉synchronized关键字 
  if(products.size()>0) 
  {    Product p= products.get(0); 
    products.remove(0); 
    number--; 
    return p; 
 
  } 
  else 
    return null; 
} 
public synchronized void addProduct(Product p){  //可以去掉synchronized关键字 
       
      products.add(p); 
      number++; 
} 
 
} 

Consumer.java

package consumerProducer; 
 
public class Consumer implements Runnable { 
 private String id; 
  Pool pool; 
  public Consumer(String id,Pool pool) 
  { 
    this.id=id; 
    this.pool=pool; 
     
  } 
  @Override 
  public void run() { 
    while(!Thread.currentThread().interrupted()) 
    { 
      Product product=null; 
      synchronized(pool){ 
        while(pool.getNumber()<=0)//生产不足 
        { 
          try { 
            pool.wait();//生产者等待 
          } catch (InterruptedException e) { 
            // TODO Auto-generated catch block 
            e.printStackTrace(); 
          } 
         
       
          
        } 
         product=pool.consumeProduct(); 
      } 
        System.out.println("consuming "+id+product.toString()); 
        try { 
          Thread.sleep(1000); 
        } catch (InterruptedException e) { 
          // TODO Auto-generated catch block 
          e.printStackTrace(); 
        } 
         
       
       
       
    } 
  } 
 
} 

Producer.java

package consumerProducer; 
 
public class Producer implements Runnable{ 
  private int i_p=0; 
  private String id; 
  Pool pool; 
  int i=0; 
  public Producer(String id ,Pool pool) 
  { 
     
    this.id=id; 
    this.pool=pool; 
  } 
  public Product createProduct() 
  { 
     
    return new Product(String.valueOf(++i_p)); 
     
  } 
  @Override 
  public void run() { 
    // TODO Auto-generated method stub 
   while(!Thread.currentThread().interrupted()) 
   { 
     Product p=new Product(String.valueOf(++i_p)); 
     try { 
      Thread.sleep(1000); 
    } catch (InterruptedException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
    } 
     synchronized(pool) 
     { 
       pool.addProduct(p); 
       System.out.println("producer "+id+" adding product...."+p.toString()); 
       pool.notifyAll(); 
     }  
      
   } 
     
  } 
 
} 

Main.java

package consumerProducer; 
 
public class Main { 
 
  public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    Pool pool=new Pool(); 
   for(int i=0;i<5;i++) 
   { 
     Thread consumer=new Thread(new Consumer("consumer "+i,pool)); 
     Thread producer=new Thread(new Producer("producer "+i,pool)); 
     consumer.start(); 
     producer.start(); 
      
   } 
  } 
 
} 

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# JAVA多线程实现生产者消费者的实例详解  # java  # 线程生产者与消费者的问题  # 基于Java 生产者消费者模式(详细分析)  # Java生产者消费者模式实例分析  # Java多种方式实现生产者消费者模式  # Java实现简易生产者消费者模型过程解析  # Java编程生产者消费者实现的四种方法  # 希望能  # 谢谢大家  # 多线程  # 实现了  # number  # int  # lt  # List  # util  # Pool  # product  # import  # br  # consumeProduct  # synchronized  # remove  # size  # setNumber  # products  # gt 


相关文章: 如何撰写建站申请书?关键要点有哪些?  内部网站制作流程,如何建立公司内部网站?  建站DNS解析失败?如何正确配置域名服务器?  大连网站制作公司哪家好一点,大连买房网站哪个好?  如何通过建站之星自助学习解决操作问题?  定制建站方案优化指南:企业官网开发与建站费用解析  如何在Tomcat中配置并部署网站项目?  自助网站制作软件,个人如何自助建网站?  建站之星如何助力企业快速打造五合一网站?  建站之星导航菜单设置与功能模块配置全攻略  定制建站平台哪家好?企业官网搭建与快速建站方案推荐  建站之星安全性能如何?防护体系能否抵御黑客入侵?  制作网站的过程怎么写,用凡科建站如何制作自己的网站?  建站之星如何防范黑客攻击与数据泄露?  如何通过VPS建站实现广告与增值服务盈利?  网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?  C#怎么使用委托和事件 C# delegate与event编程方法  电商平台网站制作流程,电商网站如何制作?  如何选择域名并搭建高效网站?  c# 在高并发下使用反射发射(Reflection.Emit)的性能  如何快速搭建FTP站点实现文件共享?  广东企业建站网站优化与SEO营销核心策略指南  建站之星上传入口如何快速找到?  模具网站制作流程,如何找模具客户?  长春网站建设制作公司,长春的网络公司怎么样主要是能做网站的?  建站VPS选购需注意哪些关键参数?  宝塔Windows建站如何避免显示默认IIS页面?  制作企业网站建设方案,怎样建设一个公司网站?  如何在Golang中使用replace替换模块_指定本地或远程路径  保定网站制作方案定制,保定招聘的渠道有哪些?找工作的人一般都去哪里看招聘信息?  如何选择最佳自助建站系统?快速指南解析优劣  如何选择CMS系统实现快速建站与SEO优化?  如何有效防御Web建站篡改攻击?  深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?  建站之星3.0如何解决常见操作问题?  建站10G流量真的够用吗?如何应对访问高峰?  宝塔面板如何快速创建新站点?  如何做网站制作流程,*游戏网站怎么搭建?  实例解析Array和String方法  建站之星如何通过成品分离优化网站效率?  建站之星展会模板:智能建站与自助搭建高效解决方案  网站制作网站,深圳做网站哪家比较好?  专业网站建设制作报价,网页设计制作要考什么证?  油猴 教程,油猴搜脚本为什么会网页无法显示?  专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?  建站主机服务器选型指南与性能优化方案解析  东莞市网站制作公司有哪些,东莞找工作用什么网站好?  如何通过二级域名建站提升品牌影响力?  想学网站制作怎么学,建立一个网站要花费多少?  怀化网站制作公司,怀化新生儿上户网上办理流程? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。