博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
阻塞队列实现日志接口开发
阅读量:5014 次
发布时间:2019-06-12

本文共 2243 字,大约阅读时间需要 7 分钟。

前言

近日开发一个日志接口,供其他系统通过 webservice 进行调用。考虑到并发,多线程决定使用阻塞队列实现日志接口。记录实现的过程,供大家参考,对阻塞队列不了解的,可以参照上一篇博文。

实现阻塞队列

public class RemoteUpgradeLogQueue {     private static RemoteUpgradeLogQueue remoteUpgradeLogQueue  = new RemoteUpgradeLogQueue();     //定义一个阻塞队列     private BlockingQueue blockingQueue = new LinkedBlockingQueue<>();     private RemoteUpgradeLogQueue(){}     public static RemoteUpgradeLogQueue getInstance(){           return remoteUpgradeLogQueue;     }     public Boolean push(RemoteUpgradeLogInfo remoteUpgradeLogInfo){           return this.blockingQueue.add(remoteUpgradeLogInfo);     }     public RemoteUpgradeLogInfo pop(){           RemoteUpgradeLogInfo remoteUpgradeLogInfo = null;           try {                remoteUpgradeLogInfo = (RemoteUpgradeLogInfo) this.blockingQueue.take();           } catch (InterruptedException e) {                System.out.println("从队列中取出日志错误!");           }           return remoteUpgradeLogInfo;     }     public int size(){           return this.blockingQueue.size();     }}

定义消费者

service调用的方法就为具体的处理日志的方法

@Componentpublic class DealRemoteUpgradeLogQueue {     @Autowired     private RemoteUpgradeLogService remoteUpgradeLogService;          @PostConstruct     public void startLogThread(){           ExecutorService e = Executors.newFixedThreadPool(1);           e.submit(new PopLogInfo(remoteUpgradeLogService));     }          class PopLogInfo implements Runnable {           RemoteUpgradeLogService remoteUpgradeLogService;        public PopLogInfo(RemoteUpgradeLogService remoteUpgradeLogService) {            this.remoteUpgradeLogService = remoteUpgradeLogService;        }        @Override        public void run() {            while (true) {                try {                  RemoteUpgradeLogInfo remoteUpgradeLogInfo = RemoteUpgradeLogQueue.getInstance().pop();                    if(remoteUpgradeLogInfo!=null){                        remoteUpgradeLogService.saveLogInfo(remoteUpgradeLogInfo);                    }                } catch (Exception e) {                    e.printStackTrace();                }            }        }    }}

实现生产者

生产者直接往对列中 push 即可。

RemoteUpgradeLogQueue.getInstance().push(remoteUpgradeLogInfo);

转载于:https://www.cnblogs.com/jichi/p/11343985.html

你可能感兴趣的文章
3-1 案例环境初始化
查看>>
读《构建之法》第四章和十七章有感
查看>>
01背包
查看>>
开发一个12306网站要多少钱?技术分析12306合格还是不合格
查看>>
Selenium 入门到精通系列:六
查看>>
HTTP与TCP的区别和联系
查看>>
android 实现2张图片层叠效果
查看>>
我个人所有的独立博客wordpress都被挂马
查看>>
html5——动画案例(时钟)
查看>>
调用Android系统“应用程序信息(Application Info)”界面
查看>>
ios中用drawRect方法绘图的时候设置颜色
查看>>
数据库中的外键和主键理解
查看>>
个人博客03
查看>>
Expression<Func<T,TResult>>和Func<T,TResult>
查看>>
文件缓存
查看>>
关于C语言中return的一些总结
查看>>
Codeforces Round #278 (Div. 2)
查看>>
51. N-Queens
查看>>
Linux 命令 - 文件搜索命令 locate
查看>>
[Grunt] grunt.template
查看>>