美文网首页
java 向队列里写数据,定时读取队列并执行

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

作者: vincky倩 | 来源:发表于2018-06-12 14:16 被阅读0次

    在需要向队列推数据的代码块调用以下类中的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 向队列里写数据,定时读取队列并执行

          本文链接:https://www.haomeiwen.com/subject/viileftx.html