在需要向队列推数据的代码块调用以下类中的saveToQuene方法,就可以把信息推送到队列中。以下scheduleAtFixedRate可以配置读取队列数据的时间间隔。
package com.bwq;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component("testQuence")
public class TestQuence implements InitializingBean{
private static Logger logger = Logger.getLogger( TestQuence .class);
@Override
public void afterPropertiesSet() {
this.initQuene();
}
/** * 使用内存队列,使用其他队列修改下一段代码 */
static public ConcurrentLinkedQueue dataProcessQueue= new ConcurrentLinkedQueue();
/** * 以固定周期频率执行任务 * 参数:
command - 要执行的任务 *
initialDelay - 首次执行的延迟时间 *
period - 连续执行之间的周期 *
unit - initialDelay 和 period 参数的时间单位
* */
private void initQuene(){
ScheduledExecutorService executor =Executors.newScheduledThreadPool(1);
executor.scheduleAtFixedRate(new DataProcessThread(this), 1000, 10000, TimeUnit.MILLISECONDS);
}
//定时线程--处理队列中
class DataProcessThread implements Runnable{
private TestQuence bs;
public DataProcessThread( TestQuence bs){ this.bs = bs; }
public void run(){
try{
while (true){
logger.info("进来了…………");
DataProcessStruct dp = bs.getFromQuene();
if (dp !=null){ logger.info("执行逻辑…………"); }
}
}catch(Exception e){ e.printStackTrace(); } finally{ } } }
/** * 从队列中获取*/
private DataProcessStruct getFromQuene(){
try{
if(dataProcessQueue==null){
dataProcessQueue= new ConcurrentLinkedQueue();
}
return (DataProcessStruct)dataProcessQueue.poll();
} catch(Exception e){
e.printStackTrace();
} return null;
}
/** * 放在队列中 * 其他代码块调用此方法,向队列里写数据 */
public void saveToQuene(String param){
try{
dataProcessQueue.add(new DataProcessStruct( param ));
} catch(Exception e){ e.printStackTrace(); }
}
class DataProcessStruct{
private String param;
public DataProcessStruct(String param ){ this. param = param ; }
public String getCouponsNo() { return param ; }
public void setCouponsNo(String param ) { this. param = param ; }
}
}