zoukankan      html  css  js  c++  java
  • 多线程异步处理示例

    public class UserTrackTask {

     

    private static Logger logger = LoggerFactory.getLogger(UserTrackTask.class);

     

    private static AtomicBoolean init = new AtomicBoolean(false);

     

    private static AtomicBoolean running = new AtomicBoolean(false);

     

    private static ExecutorService executorService = Executors.newFixedThreadPool(1);

     

    private static BlockingQueue<UserTrackModel> queue = new LinkedBlockingQueue<UserTrackModel>();

     

    private static UserTrackService userTrackService;

     

    private static void init(){

    if(init.get()){

    return;

    }

    synchronized (init) {

    if(init.get()){

    return;

    }

    if(userTrackService == null){

    userTrackService = SpringContextUtil.getBean(UserTrackService.class);

    }

    if(!running.get()){

    start();

    }

    init.set(true);

    }

    }

     

    private static void start(){

    if(running.get()){

    return;

    }

    running.set(true);

    executorService.execute(new Runnable() {

     

    @Override

    public void run() {

    try {

    while (running.get()) {

    UserTrackModel track = null;

    try {

    track = queue.take();

    if(track == null){

    continue;

    }

    userTrackService.add(track);

    } catch (Exception e) {

    logger.error("add user track due to error",e);

    }

    }

    } catch (Exception e) {

    logger.error("proccess creditlog thread is exit!!!!");

    }

    }

    });

    }

     

    public static void save(String uid,String openId,String domain,String url,long time){

    UserTrackModel track = new UserTrackModel(uid,openId,domain,url,time);

    boolean bool = offer(track);

    if(!bool){

    logger.error("put creditlog queue due to fail. createlog=[{},{},{},{},{}]",uid,openId,domain,url,time);

    }

    }

     

    private static boolean offer(UserTrackModel track) {

    if(!init.get()){

    init();

    }

    return queue.offer(track);

    }

    }

  • 相关阅读:
    求第N个素数
    HDU1568
    HDU1003 DP
    POJ 1016 模拟字符串
    POJ 3321 树状数组(+dfs+重新建树)
    UVA12532 线段树(单点更新,区间求乘积的正负)
    POJ2488 dfs
    POJ 1195 二维树状数组
    HDU 4006 优先队列
    优先队列
  • 原文地址:https://www.cnblogs.com/spiritualWindows/p/4325803.html
Copyright © 2011-2022 走看看