zoukankan      html  css  js  c++  java
  • 异步数据处理

     后台的异步处理

     把需要处理的数据放入阻塞队列中 

    public static BlockingQueue<JSONObject> queue = new LinkedBlockingQueue<JSONObject>();
    AsyncQueue.queue.put(jsonObject);


    然后初始化线程池去执行

    public static void init(){
    executor = new ThreadPoolExecutor(100, 200, 30*1000,
    TimeUnit.MILLISECONDS, new LinkedBlockingDeque<Runnable>(5000));

    log.info("初始化核心线程数量 "+executor.getCorePoolSize());
    log.info("初始化最大线程数量 "+executor.getMaximumPoolSize());

    executor.execute(new SmsAsyncQueueTake(queue));
    }


    public static void destroyed(){
    executor.shutdown();
    }


    线程的设计 需要做的事情
    public class SmsAsyncQueueTake implements Runnable{

    private static Logger log = Logger.getLogger(SmsAsyncQueueTake.class);
    private BlockingQueue<JSONObject> queue;

    public SmsAsyncQueueTake(BlockingQueue<JSONObject> queue){
    this.queue=queue;
    }


    @Override
    public void run() {
    while(!Thread.interrupted()){
    try {
    if(AsyncQueue.executor.getQueue().size()<5000){
    JSONObject sms = queue.take();
    try {
    AsyncQueue.executor.execute(new SmsAsyncService(sms));
    } catch (RejectedExecutionException e) {
    log.debug("异步线程执行异常:"+e.getMessage());
    }

    }else{
    Thread.sleep(500);
    }

    } catch (Exception e) {
    log.error(e.getMessage());
    }
    }

    }

    }




  • 相关阅读:
    Java基础面试题总结-编程题总结
    Linux下mysql的安装与卸载并且连接navicat详解(亲测可用)
    linux 下安装redis
    linux 下安装tomcat
    Linux系统下安装jdk及环境配置(两种方法)
    Servlet概述
    多线程之volatile关键字
    多线程之ThreadLocal
    多线程之synchronized实现原理
    线程池2
  • 原文地址:https://www.cnblogs.com/yangyang2018/p/9244728.html
Copyright © 2011-2022 走看看