线程通信之生产者消费者阻塞队列版

ProdConsumer_BlockQueueDemo.java

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;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 retValue;while(FLAG){data = atomicInteger.incrementAndGet()+"";retValue = blockingQueue.offer(data,2L, TimeUnit.SECONDS);if(retValue){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生产停止");}public void myConsumer() throws Exception{String result = null;while(FLAG){result = blockingQueue.poll(2L,TimeUnit.SECONDS);if(null==result || result.equalsIgnoreCase("")){FLAG = false;System.out.println(Thread.currentThread().getName()+"\t 超过2秒,消费退出");System.out.println();System.out.println();return;}System.out.println(Thread.currentThread().getName()+"\t消费队列"+result+"成功");}}public void stop() throws Exception{this.FLAG = false;}
}/*
* volatile/CAS/atomicInteger/BlockQueue/线程交互/原子引用
* */public class ProdConsumer_BlockQueueDemo {public static void main(String[] args) throws Exception{MyResource myResource = new MyResource(new ArrayBlockingQueue<>(10));new Thread(()->{System.out.println(Thread.currentThread().getName()+"\t 生产线程启动");System.out.println();System.out.println();try{myResource.myProd();}catch (Exception e){e.printStackTrace();}},"Prod").start();new Thread(()->{System.out.println(Thread.currentThread().getName()+"\t 消费线程启动");try{myResource.myConsumer();}catch (Exception e){e.printStackTrace();}},"Consumer").start();try{TimeUnit.SECONDS.sleep(5);}catch (InterruptedException e){e.printStackTrace();}System.out.println();System.out.println();System.out.println();System.out.println("5秒钟到,main停止");myResource.stop();}
}

线程通信之生产者消费者阻塞队列版相关推荐

  1. Java多线程之线程通信之生产者消费者阻塞队列版

    Java多线程之线程通信之生产者消费者传统版和阻塞队列版 目录 线程通信之生产者消费者传统版 线程通信之生产者消费者阻塞队列版 1. 线程通信之生产者消费者传统版 题目: 一个初始值为零的变量,两个线 ...

  2. 生产者消费者_【线程通信】生产者消费者模型

    1生产者消费者模型介绍 生产者消费者模型,是每一个学习多线程的的人都需要知道的模型; 大致情况就是:有两个线程,一个负责生产产品,一个消费产品,两者公用同一块内存区域,也就是产品放在了同一块内存上面, ...

  3. 多线程-线程通信:生产者消费者例题

    /*** 线程通信的应用:经典例题:生产者/消费者问题** 生产者(Productor)将产品交给店员(Clerk),而消费者(Customer)从店员处取走产品,* 店员一次只能持有固定数量的产品( ...

  4. 线程通信:生产者消费者问题

    1.应用场景: 假设仓库中只能放一件产品,生产者将生产出来的产品放入仓库,消费者将仓库中的产品取走. 如果仓库中没有产品,则生产者将产品放入仓库,否则停止生产并等待,知道仓库中的产品被消费者取走为止. ...

  5. 线程通信,生产者消费者问题案例,模拟来电提醒和接听电话

    package com.cfqp;public class Phone {private static boolean flag = false;public static void main(Str ...

  6. Java多线程(实现多线程、线程同步、生产者消费者)

    1.实现多线程 1.1简单了解多线程[理解] 是指从软件或者硬件上实现多个线程并发执行的技术. 具有多线程能力的计算机因有硬件支持而能够在同一时间执行多个线程,提升性能. 1.2并发和并行[理解] 并 ...

  7. JAVA入门基础进阶(十四)—— 实现多线程、线程同步、生产者消费者

    文章目录 1.实现多线程 1.1简单了解多线程[理解] 1.2并发和并行[理解] 1.3进程和线程[理解] 1.4实现多线程方式一:继承Thread类[应用] 1.5实现多线程方式二:实现Runnab ...

  8. Java学习笔记18:Java_Map集合_HashMap集合_可变参数_Stream流_多线程_线程同步_生产者消费者

    文章目录 1.Map集合 1.1Map集合概述和特点[理解] 1.2Map集合的基本功能[应用] 1.3Map集合的获取功能[应用] 1.4Map集合的遍历(方式1)[应用] 1.5Map集合的遍历( ...

  9. Qt之线程同步(生产者消费者模式 - QSemaphore)

     简述 生产者将数据写入缓冲区,直到它到达缓冲区的末尾,此时,它将从开始位置重新启动,覆盖现有数据.消费者线程读取数据并将其写入标准错误. Semaphore(信号量) 比 mutex(互斥量)有 ...

最新文章

  1. JavaEE Tutorials (15) - 对Java持久化API应用使用二级缓存
  2. mysql字段中去掉括号
  3. python 学习笔记day03-python基础、python对象、数字、函数
  4. axios vue 加载效果动画_在vue中通过axios异步使用echarts
  5. linux升级python
  6. Gartner磁盘阵列魔力象限:华为、昆腾、Infinidat势头迅猛
  7. 剑指offer面试题38. 字符串的排列(回溯)
  8. iOS手势UIGestureRecognizer的使用及手势冲突的解决办法【转】
  9. C#使用ITextSharp操作pdf
  10. flotherm热仿真,allegro怎么导出flotherm文件
  11. 2019年电赛H题电磁炮实录
  12. Gradle基础:7:Property使用方式
  13. 阳/阴性预测值Positive/negative Predictive Value(推荐AA)
  14. java 自定义控件_自定义控件的开发
  15. 台式计算机32位和64位的区别,电脑装系统选择32位还是64位? 32位和64位系统有什么区别...
  16. Android实现开屏广告(广点通SDK)
  17. Xamarin.Forms 之我的花园 - 2.从照片库选择图片和拍照功能
  18. 【图像处理】非线性滤波
  19. 山东省下载准考证必须用电脑吗
  20. 【python】 输出换行字符 “\n“

热门文章

  1. 13.jQuery选择器
  2. leetcode 44 字符匹配
  3. javascript 面向对象编程(工厂模式、构造函数模式、原型模式)
  4. 用Node.JS+MongoDB搭建个人博客(成品展示)
  5. new和override
  6. Android获取手机短信
  7. android根据项目把文件编译到文件系统中
  8. Ecplise软件Devices看到两个相同设备问题
  9. 快讯|腔家政服务商“懒猪到家”完成200万种子轮融资,卡伊妮洗衣连锁投资...
  10. vue-router使用next()跳转到指定路径时会无限循环