首页 > 其他 > 详细

阻塞队列实现日志接口开发

时间:2019-08-13 19:04:30      阅读:83      评论:0      收藏:0      [点我收藏+]

前言

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

实现阻塞队列

public class RemoteUpgradeLogQueue {

?????private static RemoteUpgradeLogQueue remoteUpgradeLogQueue? = new RemoteUpgradeLogQueue();

?????//定义一个阻塞队列

?????private <u>BlockingQueue</u> blockingQueue = new 
LinkedBlockingQueue<>();

?????private RemoteUpgradeLogQueue(){}

?????public static RemoteUpgradeLogQueue getInstance(){

???????????return remoteUpgradeLogQueue;

?????}

?????public Boolean push(RemoteUpgradeLogInfo 
remoteUpgradeLogInfo){

???????????return <u>this</u><u>.</u><u>blockingQueue</u><u>.add(</u><u>remoteUpgradeLogInfo</u><u>)</u>;

?????}

?????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调用的方法就为具体的处理日志的方法

@Component

public 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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!