• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Java > java 同步器SynchronousQueue详解及实例

java 同步器SynchronousQueue详解及实例

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了synchronousqueue,java集合类详解,java反射机制详解,java多线程详解,java内部类详解等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

同步器简介

       学习以来对线程的操作有很大的改观,从c/c++的mutex到java的各种锁(当然不是嫌麻烦,java读写锁的实现还是带来不少好处的,但是sokcet的设计我就不敢恭维了,tcp和udp是两个类,弄得我现在对udp也不怎么熟悉)。其中最让我感到特别刚需的设计就是同步器,除了countdownlatch,剩下的都比较刚需,cyclicbarrier我现在唯一能感觉他的好用处就是循环打印a,b,exchanger和SynchronousQueue我一直没发现什么作用,两个就适合生产者消费者问题。以上就是四大同步器,听说过2个以上的就很厉害了,有些场合太难想了。

场景思路

      这次说最后两个用的场景吧,我要做的事情呢,是采集一堆数据,然后采集另外的数据综合处理,但是两个数据是和时间相关的,如果顺序执行的话,那么处理结果的可信度越低,最初的设想就是利用异步处理,两个数据采集同时进行,然后一起处理,futuretask,就作为首选,我的采集信息还是周期性的任务,必需要用定时的线程池了,但是这种线程池(别说timer,这个类更建议用线程池替换)并没有为异步处理做返回值,我也没办法直接获取处理的数据了,无奈的情况下只能用线程来做了,同时也必须要用同步器来同步了,用手动阻塞线程然后唤醒这个行为实在是太不可取了,你全唤醒了,可能造成不该运行的代码开始运行,唤醒单个,还得看cpu的调度,于是想到了exchanger和SynchronousQueue,我最终选取了SynchronousQueue。

SynchronousQueue

        其实就是特殊的阻塞队列,特殊就特殊在他最多放一个元素,而且这个元素不在特定的时间消费掉就没了,而且永远长度都是0,具体看api就发现能用的方法没几个,3个是放入,2个是取走。

demo

生产者,消息最多存放1分钟

public void run() {
  try {
  queue.offer(i++,1,TimeUnit.MINUTES);
  } catch (InterruptedException e) {
  e.printStackTrace();
  }
  System.out.println("add");

 }

</div>

消费者

System.out.println(queue.poll(1,TimeUnit.SECONDS));
</div>

用了这个同步器,这种定时生产者消费者问题,代码量就很少,不需要自己再写同步的代码了。也避免了最初唤醒阻塞带来的不可预估性。

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

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • java 同步器SynchronousQueue详解及实例
  • java 同步器SynchronousQueue详解及实例

相关文章

  • 2017-05-28java容器详细解析
  • 2017-05-28JavaEE微框架Spring Boot深入解读
  • 2017-05-28mybatis高级映射一对多查询实现代码
  • 2017-05-28详解PipedInputStream和PipedOutputStream_动力节点Java学院整理
  • 2017-05-28Java使用File类遍历目录及文件实例代码
  • 2017-05-28Java中char[]输出不是内存地址的原因详解
  • 2017-05-28Java中IO流简介_动力节点Java学院整理
  • 2017-05-28java数据结构与算法之桶排序实现方法详解
  • 2017-05-28spring cglib 与 jdk 动态代理
  • 2017-05-28java web开发中大量数据导出Excel超时(504)问题解决

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Java程序与C语言的区别浅析
    • JVM(Java虚拟机)简介(动力节点Java学院整理)
    • Java interrupt()方法使用注意_动力节点Java学院整理
    • spring启动加载程序的几种方法介绍
    • Java内存分布归纳整理详解
    • java 中使用maven shade plugin 打可执行Jar包
    • java中重写equals和重写hashCode()
    • Java项目开发命名规范(动力节点Java学院整理)
    • Eclipse智能提示及快捷键
    • Java 中 Reference用法详解

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有