LinkedBlockingQueue 注记
近期看一个音频传输代码时,对方采用了LinkedBlockingQueue为生产者、消费者模式,来支撑读写线程。
个人感觉非常不错,因此也对这种方式进行总结,并梳理了一个基本的功能框架备用。主要两点:
1、当对queue采用take操作时,若队列为空则阻塞;
2、当对queue采用put操作时,若队列为满则阻塞;
package com.fredric; import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue; public class Buffer { private BlockingQueue<BufferData> queue; public static class BufferData { public byte mData[]; public BufferData() {
mData = new byte[100];
}
} public Buffer(int bufferSize) {
queue = new LinkedBlockingQueue<BufferData>(bufferSize);
} public BufferData doGet(){
if(null != queue){
try {
return (BufferData) queue.take();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return null;
} public boolean doPut(BufferData data){
try {
queue.put(data);
return true;
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return false;
}
}
package com.fredric; public class Reader implements Runnable{ Buffer buffer; public Reader(Buffer buffer){
this.buffer = buffer;
} @Override
public void run() { try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(new String(buffer.doGet().mData)
+ " " + Thread.currentThread().getName());
}
}
package com.fredric; import java.util.Date;
import java.util.concurrent.BlockingQueue; import com.fredric.Buffer.BufferData; public class Writer implements Runnable{ Buffer buffer; public Writer(Buffer buffer){
this.buffer = buffer;
} @Override
public void run() {
BufferData temp = new BufferData();
String str = new Date().toString();
System.arraycopy(str.getBytes(), 0, temp.mData, 0, str.getBytes().length); if(true == buffer.doPut(temp)){
System.out.println(" Thread Name: " + Thread.currentThread().getName());
}
}
}
package com.fredric; public class App { public static void main(String[] args){ Buffer buffer = new Buffer(2); Writer writer = new Writer(buffer);
Reader reader = new Reader(buffer); for (int i = 0; i < 5; i++) {
new Thread(writer, "writer " + (i + 1)).start(); new Thread(reader, "reader " + (i + 1)).start();
}
}
}
LinkedBlockingQueue 注记的更多相关文章
- ArcGIS中的标注和注记
在ArcMap中可以使用标注和注记来识别要素,选择标注或注记取决于你需要如何控制文本显示以及在ArcMap中如何存储文本. 1.标注只是临时显示相关数据或字段 2.标注用于长时间保存数据以及显示方式. ...
- 关于arcgis engine的注记显示与关闭问题
1.注记的添加需要拿到IGeoFeatureLayer接口下的AnnotationProperties属性,转为IAnnotationLayerPropertiesCollection接口,并创建一个 ...
- 【ESRI论坛6周年征文】ArcEngine注记(Anno/ Label/Element等)处理专题 -入门篇
原发表于ESRI中国社区,转过来.我的社区帐号:jhlong http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=122097 ----------- ...
- 创建文本注记TextElement
1.创建一个字体 /// <summary> /// 字体设置 /// </summary> /// <param name="size">Th ...
- 创建线注记LineElement
1.根据2点创建一条线 /// <summary> /// 创建线 /// </summary> /// <param name="pnt1"> ...
- ArcMap 标注、注记、图形文本
标注.注记.图形文本 2016年8月10日10:29 ArcMap中怎样向地图添加文本,其中标注与注记是重点内容,此处对此进行总结. 参考链接: ①地图文本基本词汇: 什么是文本? ArcGIS 提供 ...
- 【ArcEngine入门与提高】Element(元素)、Annotation(注记)旋转
因项目需要,需要做一个旋转注记的工具.因为注记这玩意用的比较少,网上资源也很少,所以做起来相当头疼.在经过一番研究之后,终于搞清楚注记的存储原理了,原来是和Element的类似,只不过注记是要把Ele ...
- WebGIS中自定义互联网地图局部注记的一种方案
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1. 前言 实际项目中我们经常会遇到这样一种场景:地图底图可能是互 ...
- ArcGIS连带文字注记导出为CAD格式
可以使用ArcGIS的"Export To CAD"工具将点.线.面等要素直接导出为CAD格式.如果要连带将ArcGIS中的文字标注导出为CAD格式要稍麻烦一点,下面是一个例子. ...
随机推荐
- 小米众筹新品---8H凉感慢回弹记忆绵枕 99元 上手开箱图
在众目睽睽之下,商城终于成了杂货铺 众筹发布了第98期新品——8H凉感慢回弹记忆绵枕H1,售价为99元,主打舒适凉感,抗菌吸湿,三曲线护颈设计,3~5秒慢回弹. 本着程序员的读书历程:x 语言入门 — ...
- selenium自动化测试在富文本中输入信息的方法
第一次用selenium+python编写自动测试脚本,因为页面中插入了富文本编辑,开始怎么都无法输入进去,度娘好多方法都无效,分享踩坑的经历一是为了记录一下自己的成长,二是为了给同样摸索seleni ...
- Unity引擎相关知识UnityKnowledgeHyperlink
请简述Unity中的四种坐标系 http://liuqingwen.me/blog/2017/07/31/understanding-coordinate-system-in-unity3d/
- 高精度POJ1001
今天看到这道题了 poj1001 题目地址是http://bailian.openjudge.cn/practice/1001/ 英文看得懂,可是算法不明白,所以转别人的文章,留着给学生看看:乔高建( ...
- hbase读的性能优化
任何系统都会有各种各样的问题,有些是系统本身设计问题,有些却是使用姿势问题.HBase也一样,在真实生产线上大家或多或少都会遇到很多问题,有些是HBase还需要完善的,有些是我们确实对它了解太少.总结 ...
- 修改或添加HTTP请求头
1.Cookie的修改 (一)cookie长什么样 cookie是一个个键值对(“键=值”的形式)加上分号空格隔开组合而成, 形如: "name1=value1; name2=value2; ...
- php的运行机制
php的解析过程是 apache -> httpd -> php5_module -> sapi -> php cgi (外部应用程序)只是用来解析php代码的 sapi中的其 ...
- Vue-Router嵌套路由
1:查看router-view所对应的位置,是属于顶级出口还是存在于某个组件当中 2:当router-view存在于某个组件当中时 const User = { template: ` <div ...
- vue 调用摄像头拍照以及获取相片本地路径(实测有效)
在学习这个的时候有一点前提:这是针对手机功能的,所以最重要的是要用手机进行实时调试 包含图片的增加和删除功能 <template> <div> <!--照片区域--> ...
- 开始食用grpc(之一)
开始食用grpc(之一) 转载请注明出处:https://www.cnblogs.com/funnyzpc/p/9501353.html ``` 记一次和一锅们压马路,路过一咖啡厅(某巴克),随口 ...