博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
160801、BlockingQueue处理多线程
阅读量:4611 次
发布时间:2019-06-09

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

前面介绍过spring的taskExecutor,今天介绍一个jdk里处理多线程的方法一、spring的配置文件(注入bean)
二、线程类CustomerButton.javaimport java.util.concurrent.BlockingQueue;import nl.bitwalker.useragentutils.UserAgent;import org.apache.commons.lang.StringUtils;import org.springframework.web.context.ContextLoader;import org.springframework.web.context.WebApplicationContext;import com.xxxx.cms.entity.main.CmsClickButton;import com.xxxx.cms.manager.main.CmsClickButtonMng;import com.xxxx.common.util.UserAgentUtils;@SuppressWarnings("rawtypes")public class ConsumerButton implements Runnable{ public static boolean running = false; protected WebApplicationContext ctx; private CmsClickButtonMng cmsClickButtonMng;//要处理的类 protected BlockingQueue queue = null; protected static int i = 0; public ConsumerButton(BlockingQueue queue) { this.queue = queue; } public void run() { try { System.out.println("queue大小为:"+ queue.size()); while(!queue.isEmpty()){ CmsClickButton cb = (CmsClickButton) queue.take(); if(cb != null){ record(cb); } } ConsumerButton.running = false; } catch (InterruptedException e) { e.printStackTrace(); } } /**业务*/ public void record(CmsClickButton cb){ try { if(cb != null){ if(StringUtils.isNotBlank(cb.getAgent())){ String agent = cb.getAgent(); String customerModel = UserAgentUtils.getCustomerModel(agent);//手机型号 cb.setCustomerModel(customerModel); UserAgent userAgent = UserAgent.parseUserAgentString(agent); if(userAgent != null){ String browserName = String.valueOf(userAgent.getBrowser().getName());//浏览器类型 String operatingSystem = String.valueOf(userAgent.getOperatingSystem().getName());//操作系统类型 String browserVersion =String.valueOf(userAgent.getBrowserVersion());//浏览器版本 boolean isMobileDevice = userAgent.getOperatingSystem().isMobileDevice();//是否是移动设备 cb.setBrowserName(browserName); cb.setBrowserVersion(browserVersion); cb.setIsMobileDevice(isMobileDevice); cb.setOperatingSystem(operatingSystem); } } WebApplicationContext wac = ContextLoader.getCurrentWebApplicationContext(); cmsClickButtonMng = (CmsClickButtonMng) wac.getBean("cmsClickButtonMng"); cmsClickButtonMng.saveCb(cb); ConsumerButton.i++; System.out.println("finish ..."+ConsumerButton.i); } } catch (Exception e) { e.printStackTrace(); } }}三、Producer.javaimport java.util.concurrent.BlockingQueue;import com.gmiao.cms.entity.main.CmsClickButton;import com.gmiao.cms.entity.main.CmsTrafficPage;@SuppressWarnings("rawtypes")public class Producer implements Runnable { protected BlockingQueue queue = null; protected CmsTrafficPage tp = null; //产品一 protected CmsClickButton cb = null; //产品二 public Producer(BlockingQueue queue,CmsTrafficPage tp) { this.queue = queue; this.tp = tp; } public Producer(BlockingQueue queue,CmsClickButton cb) { this.queue = queue; this.cb = cb; } @SuppressWarnings("unchecked") public void run() { try { if(tp != null){ queue.put(tp); }else if(cb != null){ queue.put(cb); } } catch (InterruptedException e) { e.printStackTrace(); } } }四、springmvc /** * 参数指队列的最大容量 */ public static BlockingQueue queue = new ArrayBlockingQueue(10000); @RequestMapping(value="/save.jspf") public void save(String pid,String openId,String pageName,HttpServletRequest request,HttpServletResponse response){ try { //如果项目id或 页面名称为空,则不作记录 if(StringUtils.isBlank(pid) || StringUtils.isBlank(pageName)){ ajaxErrorToJson(response, null, "项目id或页面名称不能为空!"); return ; } CmsTrafficPage tp = new CmsTrafficPage(); tp.setPid(pid); tp.setDate(new Date()); tp.setStayTime(0l); tp.setIp(RequestUtils.getIpAddr(request));//用户ip地址 tp.setPageName(pageName); tp.setPageUrl(request.getHeader("Referer"));//发起请求的页面链接 tp.setSessionId(request.getSession().getId());//用户sessionId String agent = request.getHeader("user-agent");//客户端信息 if(StringUtils.isNotBlank(agent)){ tp.setAgent(agent); } BlockingQueue queue = TrafficPageAct.queue;//所在的action或controller Producer producer = new Producer(queue,tp); new Thread(producer).start(); if(!Consumer.running){ Consumer consumer = new Consumer(queue); new Thread(consumer).start(); Consumer.running = true; } } catch (Exception e) { log.error("记录页面的访问出错了!",e); ajaxErrorToJson(response, null, "记录页面访问出错了!"); return ; } } 我这里只是项目代码中使用BlockQueue,要了解或学习可以查看下面一位网页的文章http://wsmajunfeng.iteye.com/blog/1629354或查看jdk文档

 

 

 

 

  

转载于:https://www.cnblogs.com/zrbfree/p/5736448.html

你可能感兴趣的文章
【WEB前端经验之谈】时间一年半,或沉淀、或从零开始。
查看>>
优云软件助阵GOPS·2017全球运维大会北京站
查看>>
linux 装mysql的方法和步骤
查看>>
poj3667(线段树区间合并&区间查询)
查看>>
51nod1241(连续上升子序列)
查看>>
SqlSerch 查找不到数据
查看>>
集合相关概念
查看>>
Memcache 统计分析!
查看>>
(Python第四天)字符串
查看>>
个人介绍
查看>>
使用python动态特性时,让pycharm自动补全
查看>>
MySQL数据库免安装版配置
查看>>
你必知必会的SQL面试题
查看>>
html5 Canvas绘制时钟以及绘制运动的圆
查看>>
Unity3D热更新之LuaFramework篇[05]--Lua脚本调用c#以及如何在Lua中使用Dotween
查看>>
JavaScript空判断
查看>>
洛谷 P1439 【模板】最长公共子序列(DP,LIS?)
查看>>
python timeit
查看>>
Wireless Network 并查集
查看>>
51nod 1019 逆序数
查看>>