当前位置: 首页 > news >正文

免费网页设计模板网站免费站推广网站2022

免费网页设计模板网站,免费站推广网站2022,wordpress自定义页面模板下载,想建一个网站怎么做文章目录前言一、异步队列实现思路#xff1f;二、实现步骤1.加入监听器2.实现监听器3.实现转交处理对象和转交处理线程4.自动转交异步处理5.业务如何添加前言 在某些场景下#xff0c;操作比较耗时#xff0c;给用户体验不是很好#xff0c;这时候我们就会直接想到两种方… 文章目录前言一、异步队列实现思路二、实现步骤1.加入监听器2.实现监听器3.实现转交处理对象和转交处理线程4.自动转交异步处理5.业务如何添加前言 在某些场景下操作比较耗时给用户体验不是很好这时候我们就会直接想到两种方案一种是定时任务一种就是异步队列那些实时性要求不高且比较耗时的任务是队列的最佳应用场景。 一、异步队列实现思路 持久化插入队列出队当程序突然停止当程序启动的时候从库里面拉出未执行的数据继续入队补偿机制下面是java的简单实现。 二、实现步骤 1.加入监听器 代码如下示例在web.xml 加入监听器 !--转交异步处理监听器 --listenerlistener-classcontext.ZjListener/listener-class/listener2.实现监听器 代码如下示例 public class ZjListener implements ServletContextListener {private static Logger log LoggerFactory.getLogger(ZjListener.class);Overridepublic void contextInitialized(ServletContextEvent servletContextEvent) {log.info(初始化转交异步处理线程...);ZjManager.getInstance().starup();log.info(初始化转交异步处理线程成功...);}Overridepublic void contextDestroyed(ServletContextEvent servletContextEvent) {ZjManager.getInstance().shutdown();}3.实现转交处理对象和转交处理线程 代码如下示例我就简单示例一些具体实现看业务昂 public class ZjRequset {private String dm;private String xh;public String getDm() {return dm;}public void setDm(String dm) {this.dm dm;}public String getXh() {return xh;}public void setXh(String xh) {this.xh xh;} }public class ZjThread implements Runnable{private ZjRequset requset;private ZjService zjService WebAppContext.getBeanEx(ZjService);/*** description 实例化一个自动转交处理线程* param requset*/public ZjThread(ZjRequset requset){this.requset requset;}/*** description 获取请求* return ZjRequset*/public ZjRequset getRequest() {return requset;}Overridepublic void run() {if (requset ! null){zjService.saveZj(requset.getDm(), requset.getXh());}} } 4.自动转交异步处理 代码如下示例这一块就是核心的代码了 public class ZjManager {private static final Log LOG LogFactory.getLog(ZjManager.class);private static final ZjManager INSTANCE new ZjManager();/*** 线程池维护线程的最少数量*/private final static int CORE_POOL_SIZE 2;/*** 线程池维护线程的最大数量*/private final static int MAX_POOL_SIZE 3;/*** 线程池维护线程所允许的空闲时间*/private final static int KEEP_ALIVE_TIME 0;/*** 线程池所使用的缓冲队列大小*/private final static int WORK_QUEUE_SIZE 200;/*** 是不是第一次启动程序*/private static boolean FIRST_QD true;/*** 自动转交异步处理队列*/private final QueueZjRequset requestQueue new LinkedListZjRequset();/*** 线程池*/private ThreadPoolExecutor threadPool null;/*** 调度器*/private ScheduledExecutorService scheduler null;/*** description 获取异步处理管理器实例*/public static ZjManager getInstance(){return INSTANCE;}/*** description 队列是否为空*/private boolean hasAcquire() {return !requestQueue.isEmpty();}/*** description 启动工作线程*/public boolean starup(){LOG.info( Console.getNowStr() 正在启动异步处理管理器...);threadPool new ThreadPoolExecutor(CORE_POOL_SIZE, MAX_POOL_SIZE, KEEP_ALIVE_TIME, TimeUnit.SECONDS,new ArrayBlockingQueueRunnable(WORK_QUEUE_SIZE), this.handler);scheduler Executors.newScheduledThreadPool(1);scheduler.scheduleAtFixedRate(accessBufferThread, 0, 3, TimeUnit.SECONDS);LOG.info(Console.getNowStr() 启动异步处理管理器成功!);return true;}/*** description 关闭工作线程*/public void shutdown(){if (scheduler ! null) {scheduler.shutdown();}if (threadPool ! null) {threadPool.shutdown();}}/*** description 处理器*/final RejectedExecutionHandler handler new RejectedExecutionHandler() {Overridepublic void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {synchronized (requestQueue) {try {requestQueue.offer(((ZjThread) r).getRequest());} catch (Exception e) {LOG.error(插入自动转交队列失败,e);}}}};/*** description 访问消息缓存的调度线程,查看是否有待定请求如果有则创建一个新的并添加到线程池*/final Runnable accessBufferThread new Runnable() {Overridepublic void run() {synchronized (requestQueue) {try {if (FIRST_QD){reloadRequest();}if (hasAcquire()) {ZjRequset request requestQueue.poll();if (request ! null) {Runnable task new ZjThread(request);threadPool.execute(task);}}} catch (Exception e) {LOG.error(重新执行失败,e);}}}};/*** 增加一个数据库操作** param request the request*/public void AddRequest(ZjRequset request) {try {if (request ! null) {//持久化写入库中wirteRequest(request);Runnable task new ZjThread(request);threadPool.execute(task);}} catch (Exception e) {LOG.error(e.getMessage(),e);}}/*** 写入到表中** param request the request*/void wirteRequest(ZjRequset request) {//将要请求写入库}/*** 将库中未执行的任务添加到队列中*/void reloadRequest() {FIRST_QD false;Connection conn null;PreparedStatement pst null;ResultSet rs null;//举个例子try {conn getConn();pst conn.prepareStatement(sql);rs pst.executeQuery();while (rs.next()) {ZjRequset request new ZjRequset();request.setDm(rs.getString(DM));request.setXh(rs.getString(XH));ZjManager.getInstance().AddRequest(request,);}} catch (SQLException e) {LOG.error(e.getMessage(), e);}finally {DBUtils.closeResultSet(rs);DBUtils.closePStatement(pst);DBUtils.closeConnection(conn);}}/*** 获取队列待处理线程数量*/public int getQueueCount(){return requestQueue.size();}/*** 获取处理线程的状态*/public int getThreadZt(){return threadPool.getActiveCount();}}5.业务如何添加 ZjRequset clRequest new ZjRequset();clRequest.setDm(dm);clRequest.setXh(xh);ZjManager.getInstance().AddRequest(clRequest);
http://www.yutouwan.com/news/375980/

相关文章:

  • sql2008做查询网站做网站 (公司)
  • 苏州网站建设 牛如何禁止某ip访问网站
  • 管理软件开发公司湖南网站seo优化
  • ?]后台的网站可以备案吗wordpress永久链接
  • 浙里建app官方网站成都网页制作培训机构
  • 网站排名费用大型网站建设 cms cdm dmp
  • 手机网站解析地址回兴网络推广软件
  • 怎么做网站主网站开发费用一般为多少
  • 重庆做网站letide网站开发公司 logo
  • 同里做网站wordpress附件图片
  • 开源建站系统有哪些h5个人网页制作
  • 建设电子商务网站的预期收益能在线做国二计算机题目的网站
  • 榆次建设局网站网站分页js
  • 东莞建设小学网站郑州网站建设gusai123
  • 成都响应式网站开发沈阳最新公告
  • 小何自助建站重庆专业网站推广
  • 定制衣服的厂家保定seo企业网站
  • 开发触屏版网站标签网页设计存在的问题及分析
  • ps网站设计与制作宁波装修公司
  • 做菠菜网站判多久利用js做简单的网站
  • 济南公司制作网站公司背景墙logo设计
  • 哪个网站专做进口商品的视觉比较好看的网站
  • 大连做网站仟亿科技电脑游戏网站建设
  • 域名可以永久买断吗wordpress 自动seo插件
  • 山东咕果做网站怎么样工信部网站备案多久
  • 网站内页检测网站ip域名查询
  • 阿里网站建设需要准备什么软件境外网站 icp备案
  • 自做网站需要多少钱提供郑州网站建设
  • 石狮网站建设价格网站建设硬件预算
  • 组工网站档案数字化建设高端定制外贸网站