import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;/*** 描述:生产者消费者 3.0  阻塞队列 版** @author 小纸人* @create 2019-07-31 22:05* <p>* 使用的技术 :* volatile、CAS、atomicInteger、BlockQueue、线程交互、原子引用*/class MyResource {private volatile boolean FLAG = true; //默认开启,生产 + 消费private AtomicInteger atomicInteger = new AtomicInteger();BlockingQueue<String> blockingQueue = null;public MyResource(BlockingQueue<String> blockingQueue) {this.blockingQueue = blockingQueue;System.out.println("使用了:" + blockingQueue.getClass().getName());}public void myProd() throws Exception {String data = null;boolean returnVal = false;while (FLAG) {data = atomicInteger.incrementAndGet() + "";returnVal = blockingQueue.offer(data, 2L, TimeUnit.SECONDS);if (returnVal) {System.out.println(Thread.currentThread().getName() + "\t 插入队列" + data + "成功");} else {System.out.println(Thread.currentThread().getName() + "\t 插入队列" + data + "失败");}//一秒钟生产一次TimeUnit.SECONDS.sleep(1);}System.out.println(Thread.currentThread().getName() + "\t FLAG = false,生产结束");}public void myConsumer() throws Exception {String result = null;while (FLAG) {result = blockingQueue.poll(2L, TimeUnit.SECONDS);if (null == result || result.equalsIgnoreCase("")) {System.out.println(Thread.currentThread().getName() + "\t 超过2秒没有消费。消费退出");return;}System.out.println(Thread.currentThread().getName() + "\t 消费" + result + "成功");}}public void stop() {this.FLAG = false;}
}public class Version3_0 {public static void main(String[] args) {MyResource myResource = new MyResource(new ArrayBlockingQueue<>(10));new Thread(() -> {System.out.println("生产者线程启动");try {myResource.myProd();} catch (Exception e) {e.printStackTrace();}}, "Prod").start();new Thread(() -> {System.out.println("消费者线程启动");try {myResource.myConsumer();} catch (Exception e) {e.printStackTrace();}}, "Consumer").start();//暂停一会线程try { TimeUnit.SECONDS.sleep(5); } catch (Exception e) { e.printStackTrace(); }System.out.println();System.out.println("5秒钟时间到!活动结束");myResource.stop();}
}

生产者消费者3.0 阻塞队列版本相关推荐

  1. java consumed_Java设计模式—生产者消费者模式(阻塞队列实现)

    生产者消费者模式是并发.多线程编程中经典的 真实世界中的生产者消费者模式 生产者和消费者模式在生活当中随处可见,它描述的是协调与协作的关系.比如一个人正在准备食物(生产者),而另一个人正在吃(消费者) ...

  2. 生产者消费者2.0(lock)

    import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.uti ...

  3. 生产者消费者1.0(wait notify)

    /*** 描述: 生产者消费者 1.0 wait notify 版* wait notify** Thread1 对 number 加 1* Thread2 对 number 减 1* @author ...

  4. 生产者消费者之阻塞队列版本

    通过标志位的可见,和原子的一致,和阻塞队列,实现生产者和消费者同步

  5. java多线程队列_java多线程消费者生产者模式(BlockingQueue 通过阻塞队列实现)

    import java.util.concurrent.BlockingQueue; import java.util.concurrent.LinkedBlockingQueue; /** * Cr ...

  6. [Linux]生产者消费者模型(基于BlockQueue的生产者消费者模型 | 基于环形队列的生产者消费者模型 | 信号量 )

    文章目录 生产者消费者模型 函数调用角度理解生产者消费者模型 生活角度理解生产者消费者模型 为什么要使用生产者消费者模型 生产者消费者模型优点 321原则 基于BlockingQueue的生产者消费者 ...

  7. 【Linux】生产者消费者模型-基于环形队列实现

    1.环形缓冲区的优势 在上篇博客基于阻塞队列的生产者消费者模型中我介绍了什么是生产者消费者模型以及生产者-消费者模式,还没了解的可以戳链接查看. 基于阻塞队列的实现,虽然简单,但是对内存分配性能要求较 ...

  8. 【Linux入门】多线程(线程概念、生产者消费者模型、消息队列、线程池)万字解说

    目录 1️⃣线程概念 什么是线程 线程的优点 线程的缺点 线程异常 线程异常 Linux进程VS线程 2️⃣线程控制 创建线程 获取线程的id 线程终止 等待线程 线程分离 3️⃣线程互斥 进程线程间 ...

  9. python queue 生产者 消费者_Queue: 应用于生产者-消费者模式的Python队列

    图片来源于网络 版权声明 © 著作权归作者所有 允许自由转载,但请保持署名和原文链接. 不允许商业用途.盈利行为及衍生盈利行为. 什么是Queue? Queue是Python标准库中的线程安全的队列( ...

最新文章

  1. 【Math】常见的几种最优化方法
  2. 组件php53 php55区别,PHP53、54、55、56各版本重要更新简述(上)
  3. 友情链接交换看的不是“真友情”!
  4. sqlserver、oracle数据库排序空值null问题解决办法
  5. Tomcat 配置 login 和 gas
  6. windows mysql 备份_Windows下MySQL数据库备份脚本(二) | 系统运维
  7. Java日志框架介绍
  8. JavaScript parseInt() 函数
  9. openGauss 学习环境部署(docker方式),并使用dbeaver进行连接
  10. windows--bat--%0无限执行当前bat脚本
  11. Atitit ForkJoinTask的使用以及与futuretask的区别 1.1. Forkjoin原理图 1 1.2. Fork/Join使用两个类完成以上两件事情:ForkJoinTask
  12. okhttp post php,Android OkHttp 结合php 多图片上传实例
  13. 【分享】Adobe Flash Player各版本安装包官方直接下载地址
  14. fms5序列号_火枫 FMS-105分体式炉头测评
  15. Problem F: 求三角形面积-gyy
  16. 存储、冯诺伊曼和哈佛结构之间的关系
  17. 基于ADS1298的心电图仪
  18. 记录一次小程序滚动穿透解决方案
  19. vue2、vue3中使用swiper
  20. 安卓手机玩游戏卡顿怎么解决_解决安卓手机卡顿反应慢的9个技巧

热门文章

  1. 中国气象局国家气候中心
  2. linux用shell脚本写游戏,shell脚本实现猜数游戏
  3. 通往架构师之路系列之Java设计模式(二)工厂方法模式
  4. 使用EndNote在Word中插入参考文献的格式设置
  5. 2019年年终总结~平淡生活
  6. 服务器显示时间差8个小时,服务器时间相差8小时 原因与解决方法
  7. 智多星手机销售系统.
  8. 【技术备忘录】基于PicGo+GitHub+Typora创建自己的MarkDown自动图床
  9. php花店销售系统代码_花店淡季来袭,新的业绩增长点到底在哪?
  10. 达人评测 i7 13700h和i7 13620h选哪个 酷睿i713700h和13620h对比