java 向队列里写数据,定时读取队列并执行

在需要向队列推数据的代码块调用以下类中的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 ; }

    }

}

你可能感兴趣的:(java 向队列里写数据,定时读取队列并执行)