项目中使用了非阻塞队列,如下接口目的是实现阻塞队列的处理数据。
public interface IPoller {
public void addResulst(Map resut);
public void handle();
}
这个没有针对queue的关闭,必然会导致在正常退出或者JVM 退出时queue里面的数据不能处理。在使用queue等存储临时数据时必须要安全的关闭,防止数据丢失,如此增加如下处理
public class Poller implements IPoller, BeanFactoryPostProcessor, DisposableBean
private final LinkedBlockingQueue<Map> queue = new LinkedBlockingQueue<Map>();
/*
* (non-Javadoc)
* @see org.springframework.beans.factory.DisposableBean#destroy()
*/
public void destroy() throws Exception {
if (logger.isDebugEnabled()) {
logger.debug("<<<<<<<start to close Poller in container.>>>>>>>>");
}
if (queue != null && queue.size() > 0) {
for (int i = 0; i < queue.size(); i++) {
handle();
logger.debug("<<there is " + queue.size() + "exist in queue.>>");
}
}
}
如此可以将queue里面数据处理完毕再退出, 如果要做进一步处理,可以增加JVM钩子,在JVM退出时也能够处理数据,JVM钩子的使用可以参考这个
http://edu.sun.ac/read/347
但是如上方法都不能保证处理完数据,当数据非常大时,短时间内处理不完,则会强制退出,改天找个例子再验证下。
JAVA源代码中对于关闭的逻辑有不少可以参考,一般会提供给你一个关闭的方法,用于退出时主动关闭。
比如在util.Timer 中可以看到如下的退出逻辑
public void cancel() {
synchronized(queue) {
thread.newTasksMayBeScheduled = false;
queue.clear();
queue.notify(); // In case queue was already empty.
}
}
分享到:
相关推荐
delphi中关于队列的使用QUEUE,已在delphi7中调试通过。 学习queue的小例子。
C语言头文件 QUEUE.HC语言头文件 QUEUE.HC语言头文件 QUEUE.HC语言头文件 QUEUE.HC语言头文件 QUEUE.HC语言头文件 QUEUE.HC语言头文件 QUEUE.HC语言头文件 QUEUE.HC语言头文件 QUEUE.HC语言头文件 QUEUE.HC语言...
spring-jms使用queue发送消息简单例子,详细参考:http://blog.csdn.net/xiejx618/article/details/38849249
线程A的Handler对象参考可以传递给别的线程,让别的线程B或C等能送讯息来给线程A(存于A的Message Queue里)。 线程A的Message Queue里的讯息,只有线程A所属的对象可以处理之。 使用Looper.myLooper可以取得...
stl容器queue的使用 包含6.0代码 以及详细的文档说明
Queue-Queue-Queue
Queue与Topic的比较,学习JMS和activemq必须看的资料之一
前端开源库-promise-queue-plusPromise Queue Plus,基于Promise的队列。支持超时、重试等。
项目中模拟两个线程,一个线程不断产生数据(例如网络或者蓝牙不断的发数据过来,采用定时器每一段时间接受一次数据)并往队列中插入数据,另一个线程不断的将队列中的数据读出并存到一个txt文件中,因为往硬盘或者...
依次展开“Microsoft Message Queue (MSMQ) 服务器”、“Microsoft Message Queue (MSMQ) 服务器核心”, 然后选中要安装的消息队列功能的复选框。单击“确定”。 如果系统提示您重新启动计算机,请单击“确定”以...
数据结构Queue的实现在queue.h中, testQ为queue的用法
MessageQueue实战MessageQueue实战MessageQueue实战MessageQueue实战MessageQueue实战MessageQueue实战MessageQueue实战MessageQueue实战MessageQueue实战MessageQueue实战
java 自定义Queue队列 java 自定义Queue队列
Android Priority Job Queue
前端开源库-promise-queue承诺队列,基于承诺的队列
python 队列的使用 python2例程展示了队列的使用过程,供学习参考使用 队列:Queue queue_test.py put()函数主动改变队列 get()函数阻塞,代替查询 Produser & Consumer 定期生产,一有货就被抢购 ...
队列(Queue)代表了一个先进先出的对象集合。当您需要对各项进行先进先出的访问时,则使用队列。当您在列表中添加一项,称为入队,当您从列表中移除一项时,称为出队。
Queue机制
消息队列 Queue与Topic区别
Queue FIFO C 绝对可用的FIFO 代码