前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >设计模式学习之-生产者与消费者模式 原

设计模式学习之-生产者与消费者模式 原

作者头像
用户2603479
发布2018-08-15 16:26:37
5550
发布2018-08-15 16:26:37
举报
文章被收录于专栏:JAVA技术站

别人说的几句废话,拿来充充场面,哈哈,Java 5之前实现同步存取时,可以使用普通的一个集合,然后在使用线程的协作和线程同步可以实现生产者,消费者模式,主要的技术就是用好,wait ,notify,notifyAll,sychronized这些关键字。而在java 5之后,可以使用组阻塞队列来实现,此方式大大简少了代码量,使得多线程编程更加容易,安全方面也有保障。

BlockingQueue接口是Queue的子接口,它的主要用途并不是作为容器,而是作为线程同步的的工具,因此他具有一个很明显的特性,当生产者线程试图向BlockingQueue放入元素时,如果队列已满,则线程被阻塞,当消...

消费者代码

代码语言:javascript
复制
import java.util.concurrent.BlockingQueue;



/**
 * 消费者
 * 
 * @author lianghao
 * 
 */
public class Consumer extends Thread {
 private BlockingQueue<Integer> bq;



 public Consumer(BlockingQueue bq) {
  this.bq = bq;
 }



 /**
  * 业务执行方法
  */
 public void run() {
  while (true) {
   System.out.println("我消费了一个" + bq.poll());
   try {
    Thread.sleep(1000);
   } catch (InterruptedException e) {
    e.printStackTrace();
   }
  }
 }
}

 生产者代码

代码语言:javascript
复制
/**
 * 生产者
 * @author lianghao
 *
 */
public class Producer extends Thread{
  private BlockingQueue<Integer> bq; 
  public Producer(BlockingQueue bq) {
   this.bq = bq;
  }
  /**
   * 业务执行方法
   */
  public void run() {
   for(int i=0;i<100;i++){
    System.out.println("我是生产者我准备生产");
    bq.add(i);
    System.out.println("我生产了一个"+i);
    try {
    Thread.sleep(1000);
   } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
   
   } }
}

测式代码

代码语言:javascript
复制
public class MainTest {
  public static void main(String[] args) {
	  BlockingQueue<Integer> bq = new ArrayBlockingQueue<>(100);
	  new Producer(bq).start();
	  new Consumer(bq).start();
}
}

运行结果如下

我是生产者我准备生产 我消费了一个null 我生产了一个0 我是生产者我准备生产 我消费了一个0 我生产了一个1 我是生产者我准备生产 我消费了一个1 我生产了一个2 我是生产者我准备生产 我消费了一个2 我生产了一个3 我是生产者我准备生产 我消费了一个3 我生产了一个4 我是生产者我准备生产 我消费了一个4 我生产了一个5 我是生产者我准备生产 我消费了一个5 我生产了一个6 我是生产者我准备生产 我消费了一个6 我生产了一个7 我是生产者我准备生产

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2014/06/26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档