美文网首页
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 向队列里写数据,定时读取队列并执行

    在需要向队列推数据的代码块调用以下类中的saveToQuene方法,就可以把信息推送到队列中。以下schedule...

  • 第3章 用合适的方式发送和接收消息

    生产者和消费者是消息队列的两个重要角色,生产者向消息队列写人数据,消费者从消息队列里读取数据, RocketMQ ...

  • 定时器

    主线程执行完栈中所有同步任务之后读取任务队列依次执行,但定时器回调加入任务队列的时机有所不同 定时器延迟时间到了加...

  • 定时器

    Interval 间隔 JavaScript 提供定时执行代码的功能,叫做定时器。它们向任务队列添加定时任...

  • 读取数据

    读取数据流程 该过程可以分为三步 构造文件名队列 把文件名队列读取进来,并随即打乱shufflu,即从filena...

  • 定时器timer

    JavaScript 提供定时执行代码的功能,叫做定时器。它们向任务队列添加定时任务。setTimeout( 函...

  • JMS系列(三)-java操作JMS Topic实例

    在上一篇介绍如何通过java往jms消息队列里面写消息和读取消息,本文介绍如何通过java往jms主题里写消息和读...

  • 【Flask】简单的后台异步队列

    异步任务队列 异步队列输入 异步队列获取并执行 创建线程开始执行方法并返回进程号 主函数与flask main一起...

  • day15 stack queue,遍历目录

    栈 模拟栈结构stack = [ ]压栈(向栈里存数据) 出栈(向栈里取数据) 队列--先进先出创建一个队列 进队...

  • 循环的过程

    当某个宏任务执行完后,会查看是否有微任务队列。如果有,先执行微任务队列中的所有任务,如果没有,会读取宏任务队列中排...

网友评论

      本文标题:java 向队列里写数据,定时读取队列并执行

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