package com.zghw.concurrent.BlockingQueue;import java.util.concurrent.atomic.AtomicInteger;
/*** 饺子皮对象* @author zghw**/
public class Skin {//序号private int num;//面皮厚度private double thick;public Skin(AtomicInteger id, double thick) {this.num = id.get();this.thick=thick;}public double getThick() {return thick;}public void setThick(double thick) {this.thick = thick;}public int getNum() {return num;}public void setNum(int num) {this.num = num;}public String toString(){return "面皮"+num+" 厚度为:"+thick+"mm";}
}

生产者:

package com.zghw.concurrent.BlockingQueue;import java.util.Random;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.atomic.AtomicInteger;/*** 做面皮用来包饺子* @author zghw**/
public class DoSkin implements Runnable{private final BlockingQueue<Skin> skinQueue;private static AtomicInteger id=new AtomicInteger();private boolean isShutdown;public DoSkin(BlockingQueue<Skin> skinQueue ){this.skinQueue=skinQueue;isShutdown = false;}public void stop() {synchronized (this) {isShutdown = true;}}@Overridepublic void run() {while(true){synchronized (this) {if (isShutdown) {break;}}id.getAndIncrement();double thick =((int)(Math.random()*1000))+0.99;Skin sk=new Skin(id,thick);System.out.println("做 "+sk);/*try {Thread.sleep((int)(Math.random()*1000)+1);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}*/skinQueue.offer(sk);}}}

消费者:

package com.zghw.concurrent.BlockingQueue;import java.util.concurrent.BlockingQueue;/*** 使用面皮包饺子* * @author zghw**/
public class MakeDumpling {private final BlockingQueue<Skin> skinQueue;private final MakeThread makeThread;private boolean isShutdown;public MakeDumpling(BlockingQueue<Skin> skinQueue) {this.skinQueue = skinQueue;makeThread = new MakeThread();isShutdown = false;}public void start() {makeThread.start();}public void stop() {synchronized (this) {isShutdown = true;}makeThread.interrupt();}private class MakeThread extends Thread {@Overridepublic void run() {while (true) {synchronized (this) {if (isShutdown) {break;}}Skin skin = skinQueue.poll();if (skin != null) {/*try {// Thread.sleep((int) (Math.random() * 1000) + 1);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}*/System.out.println("使用 " + skin + " ,包饺子");}}}}}
package com.zghw.concurrent.BlockingQueue;import java.util.concurrent.*;public class MakeDumplings {public static void main(String[] args) {BlockingQueue<Skin> queue = new ArrayBlockingQueue<Skin>(100);ExecutorService exc = Executors.newFixedThreadPool(20);MakeDumpling md=new MakeDumpling(queue);DoSkin ds=new DoSkin(queue);md.start();exc.execute(ds);try {Thread.sleep(10000);ds.stop();md.stop();} catch (InterruptedException e) {e.printStackTrace();}}}

使用BlockingQueue实现包饺子( 生产者做面皮,消费者拿面皮包饺子)简单使用相关推荐

  1. 多个生产者多个消费者,只有5个包子

    2019独角兽企业重金招聘Python工程师标准>>> package com.reveiew; /** 多个生产者多个消费者,只有5个包子* 跟第一,第二的例子不同的是,不是new ...

  2. 惊!用Java实现生产者消费者问题能这么简单?

    Java简单实现生产者消费者问题 单个消费者 今天结束了多线程的学习,使用wait和notify来进行线程间的通信以此实现简易的生产者消费者问题: 首先来看什么是生产者消费者问题: 所谓生产者-消费者 ...

  3. 生产者和消费者问题(单一生产者和单一消费者)

    题目一:一组生产者和一组消费者进程共享一个初始为空,大小为n的缓冲区,只有缓冲区没有满的时候,生产者才能把消息放入缓冲区,否则必须等待:只有缓冲区未空时,消费者才可以从中取出消息,否则必须等待.由于缓 ...

  4. angularjs 让当前路由重新加载_Spring Cloud Gateway的动态路由怎样做?集成Nacos实现很简单...

    一.说明 网关的核心概念就是路由配置和路由规则,而作为所有请求流量的入口,在实际生产环境中为了保证高可靠和高可用,是尽量要避免重启的,所以实现动态路由是非常有必要的:本文主要介绍 Spring Clo ...

  5. 用Python 做成语接龙,超简单,有语音,过年和孩子玩

    用Python 做成语接龙,超简单,有语音,过年和孩子玩 成语 需要准备的资料: idiom.json文件 python3.6 安装pyttsx3 pandas numpy 在 https://git ...

  6. 利用.NET做“电子书阅读器”原来这么简单(其实你也可以做出金山词霸)

    一.利用.NET做"电子书阅读器"原来这么简单 先下载组件:Interop.SpeechLib.dll  (http://files.cnblogs.com/waw/Interop ...

  7. 复杂的事情简单做,你就是专家; 简单的事情重复做,你就是行家; 重复的事情用心做,你就是赢家。...

    复杂的事情简单做,你就是专家: 简单的事情重复做,你就是行家: 重复的事情用心做,你就是赢家. 转载于:https://www.cnblogs.com/javalyy/p/10647480.html

  8. 用css3做一个模拟火箭飞行的简单动画。

    用css3做一个模拟火箭飞行的简单动画,图片我特意上传到了图床,你也可以试试. 效果大概是这样: 需要的知识点: 知道css的transform,transition,animation属性和定义动画 ...

  9. 美食短视频配音怎么做的?其实只需简单几步

    美食短视频配音怎么做的?其实只需简单几步 优秀的美食短视频,往往只需要简单的几步就能做好.那么今天,我们就重点来说一说美食短视频配音是怎么做的,其实非常简单. 第一种:一边拍摄,一边配音. 这种美食短 ...

  10. lighthouse_Laravel中的GraphQL做得正确:如何在一个简单的博客中设置Lighthouse

    lighthouse by Oliver Nybroe 由Oliver Nybroe Laravel中的GraphQL做得正确:如何在一个简单的博客中设置Lighthouse (GraphQL in ...

最新文章

  1. 可视化生信分析利器 Galaxy 之 Docker 开发
  2. python【数据结构与算法】最大上升子序列(简单dp)
  3. 已知x=python是一种非常好的编程语言-为什么用Python,高级的Python是一种高级编程语言...
  4. 利用 Linux 查找重复文件
  5. php分区表,分区表的基本操作
  6. 2s相机 android6,Android Camera2 使用总结
  7. 5数之和python_Python基本语法5:数字和列表,基础,五
  8. Python模拟登录的几种方法
  9. hive+hbase学习手册
  10. 数据资料网站_更新......
  11. noob_CSS:从Noob到Ninja
  12. Linux打开wim文件,linux笔记 wim编辑器
  13. 如何将多个excel表格合并成一个_如何把两个excel表合并成一个
  14. 广告联盟的实现过程(一)
  15. 伤我最深,记得最真的句子:QQ伤感日志
  16. 不逼自己下不知道潜力可以有多大
  17. 【Wwise】一篇文看懂WwiseUnity热更
  18. 顾往前行,我的前端之路系列(一)
  19. 清默网络多区域 OSPF
  20. 如何看充电时长是否合理

热门文章

  1. php mpdf 设置字体,php - 将字体添加到mPDF - 堆栈内存溢出
  2. 前端模块化 CommonJs、AMD、CMD、UMD、ESmodule 发展历程与关系
  3. 对称群与置换群 定义
  4. 心态很容易受别人影响_心理学:一个人没有主见,容易受别人影响的4个表现,你有几个?...
  5. Claude2完全免费!GPT4 强劲竞争对手来了
  6. java数据结构15_二叉树和红黑二叉树
  7. 酒店小程序开发注意事项
  8. 如何判断网页邮箱出通过邮件客户端工具发送过来的(smtp发送),还是通过网页邮箱发过来的(HTTP发送)
  9. 弄懂 SourceMap,前端开发提效 100%
  10. #0005 JPA Querydsl无法生成Q类