一个简单的 Java 自动批处理队列
2017-03-23 13:18
726 查看
实际中可能有这样的应用场景,得到一个记录不需要立即去处理它,而是等累积到一定数量时再批量处理它们。我们可以用一个计数器,来一个加一个,量大时一块处理,然后又重零开始计数。如果记录的来源单一还好办,要是有多个数据源来提供记录就会有多线程环境下数据丢失的问题。
这里我编写了一个最简单的任务批处理的队列,构造了告诉它批处理数量,消费者,然后就只管往队列里添加记录,队列在满足条件时自动进行批处理。因为内部使用的是
注意: 多线程环境下往一个无线程保护的集合或结构中,如 ArrayList, LinkedList, HashMap, StringBuilder 中添加记录非常容易造成数据的丢失,而往有线程保护的目的地写东西就安全了,如 Vector, Hashtable, StringBuffer, BlockingQueue。当然性能上要付出一点代价,不过对于使用了可重入锁(ReentrantLock), 而非同步锁(synchronized) 的数据结构还是可以放心使用的。
下面是 BatchQueue 的简单实现
阅读全文 >>
这里我编写了一个最简单的任务批处理的队列,构造了告诉它批处理数量,消费者,然后就只管往队列里添加记录,队列在满足条件时自动进行批处理。因为内部使用的是
BlockingQuque来存储记录,所以多线程往里同时添加记录也没关系,最后的未达到
batchSize, 的那些记录可主动调用
completeAll()函数或在达到 timeout 后来触发批处理,并且结束队列内的循环线程。
注意: 多线程环境下往一个无线程保护的集合或结构中,如 ArrayList, LinkedList, HashMap, StringBuilder 中添加记录非常容易造成数据的丢失,而往有线程保护的目的地写东西就安全了,如 Vector, Hashtable, StringBuffer, BlockingQueue。当然性能上要付出一点代价,不过对于使用了可重入锁(ReentrantLock), 而非同步锁(synchronized) 的数据结构还是可以放心使用的。
下面是 BatchQueue 的简单实现
阅读全文 >>
相关文章推荐
- 一个非常简单的缓冲—使用Java5提供的读写锁处理多线程操作
- 一个简单的加减乘除自动生成小程序(JAVA)
- java web 处理大量用户并发提交的简单思路:队列加定时提交
- java对txt文本文件的复制粘贴(对文件内容进行了简单的修改)以行为一个处理单位
- 【JAVA】简单实现一个阻塞任务队列
- 一个简单的基于数组优先级队列的Java代码
- 处理Rational Rose 2003画图时类名、接口名等名称过长自动缩进的一个简单方法
- [原创][Java]一个简单高效的线程安全队列的JAVA实现
- java异常处理的简单实例和解释,自定义一个异常类
- Java实现一个简单的队列---Queue
- 简单算法一个(有N个人,依照顺序报123,数到3的人自动出局,问最后剩下的那个人在原来的队列中排第几)
- 一个简单的加减乘除自动生成小程序升级版(JAVA)
- 分享一个基于java ArrayList的简单MQ队列,用在连接多个蓝牙设备一个一个连接的应用中
- 一个简单的java处理json的方法
- 一个基于Java的简单分组处理算法
- 不再使用自动编号了。自己写了一个Id生成器,超级简单
- 不再使用自动编号了。自己写了一个Id生成器,超级简单
- 一个简单的能处理MIP-MAP的类
- Linux下,使用C/C++编写一个简单的消息处理程序
- Linux下,使用C/C++编写的一个简单的信号处理例程