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

室内设计软件免费下载新乡seo顾问

室内设计软件免费下载,新乡seo顾问,网站建设费入什么科目2018,推荐网站建设的书某天搬砖时遇到一个问题#xff0c;我创建了一个线程池执行任务#xff0c;刚开始的时候还是一切#xff0c;结果第二天发现有些任务没有正常执行。一看日志才发现是高峰期时线程池给我占用慢了#xff0c;任务被丢掉了。 ​ 举个例子#xff0c;我创建了一个线程池#… 某天搬砖时遇到一个问题我创建了一个线程池执行任务刚开始的时候还是一切结果第二天发现有些任务没有正常执行。一看日志才发现是高峰期时线程池给我占用慢了任务被丢掉了。 ​ 举个例子我创建了一个线程池最大线程数是10等待队列最大量是1000结果高峰期时一下给我来了2000个任务这个时候自然是顶不住的。解决办法肯定是有的比如改一下线程池的最大等待队列扩大到2000以上但是这种办法肯定不是完美的如果任务量再次增涨我又得去改一此代码吗这样肯定不行。于是我把多余的任务存储到数据库中弄个定时器去专门执行重跑。 ​ 下面是我写的一个例子 import lombok.Data;import java.util.*; import java.util.concurrent.*;public class MyTest {// 创建线程池static ThreadPoolExecutor executorService new ThreadPoolExecutor(2, 3, 2L, TimeUnit.MINUTES, new ArrayBlockingQueue(5), Executors.defaultThreadFactory(), new ThreadPoolExecutor.AbortPolicy());// 创建一个map假设它是数据库static ConcurrentHashMapInteger, Integer dbMap new ConcurrentHashMap();public static void main(String[] args) {// 用户通过正常操作流程来了一批任务executeTasks();// 启动定时任务redoTask();}static void executeTasks() {// 一次性安排30个任务for (int i 0; i 30; i) {// 获取剩余队列的数量int queueCapacity executorService.getQueue().remainingCapacity();if (queueCapacity 1) {// 当前队列数不足记录到数据库dbMap.put(i, i);continue;}System.out.println(当前队列数 queueCapacity);executorService.submit(new MyThread(i));}}Datastatic class MyThread implements Runnable {int taskId;public MyThread(int taskId) {this.taskId taskId;}Overridepublic void run() {try {// 模拟处理一个任务需要5秒TimeUnit.SECONDS.sleep(5);System.out.println(执行任务\ taskId \完毕);} catch (InterruptedException e) {e.printStackTrace();}}}/*** 模拟一个定时器不断扫描数据库中需要重跑的任务* 正式开发肯定网上找一个定时器用起来我家里穷用不起就自己随便写一个*/static void redoTask() {while (true) {// 判断数据库中是否有需要重跑的任务if (dbMap.size() 0) {System.out.println(开始执行重跑任务);int queueCapacity executorService.getQueue().remainingCapacity();// 当前队列剩余大于一半// 是否是大于一半的时候才运行重跑看具体情况if (queueCapacity 2) {System.out.println(当前队列资源足够执行重跑);ListInteger ids new LinkedList();// 从数据库中取重跑任务dbMap.forEach((k, v) - {// 因为从数据库里取任务是需要消耗一定时间的为防止资源再次被占满再获取一次队列剩余大小int queueCapacity2 executorService.getQueue().remainingCapacity();// 为避免把资源全部占用留一点给正常流程来的任务// 因为这里测试开的队列比较小只留了1根据实际情况而定if (queueCapacity2 1) {// 记录已经重跑过的任务idids.add(k);// 重跑任务executorService.submit(new MyThread(v));} else {// 如果资源占用太多则什么都不执行等待下一次扫描再执行// 有可能会出现一个问题某个任务等待了很久也轮不到它建议按时间排个序}});// 删除已经执行重跑的任务for (Integer id : ids) {dbMap.remove(id);}} else {System.out.println(当前队列资源不足跳过这次重跑);}}try {// 等待30秒继续判断TimeUnit.SECONDS.sleep(30);} catch (InterruptedException e) {}}} }​ 当然除了入库以外还有其他的办法我在网上搜索了一下延迟队列也可以解决 延迟队列解决方法不过相比之下我个人更喜欢入库的方案因为入库之后每个失败的任务我都能记录日志方便后期做分析统计。
http://www.hkea.cn/news/14314110/

相关文章:

  • wordpress 哪些网站吗那个网站可以做攻略
  • jQuery EasyUI网站开发实战网站开发应注意哪些问题
  • 网站建设教程吧知乎的网络营销方式
  • 长沙网站开发制作一级造价师注册查询系统平台入口
  • 万网标准网站销售手册学校做网站的软件
  • 网站文章不收录怎么做公司网站应该包括哪些内容
  • dreamwearver做网站油漆企业网站要怎么做
  • 网站建设专员招聘烟台做网站的
  • 网站建设 答辩记录长沙百度seo排名
  • 潍坊市作风建设年官方网站地产公司做网站维护写代码么6
  • 济南市网站建设南京seo优化推广
  • 如何抄袭网站用PS做网站搜索框
  • 广西网站建设营销公司国外网站制作有哪些
  • ie域名wordpress国外主题优化
  • 怎么登陆网站后台管理系统广州seo公司官网
  • 高端建站公司源码十六局门户网登录
  • 湖北 个人网站备案时间三亚网站运营托管介绍
  • 建设什么网站可以赚钱wordpress主题pjax
  • 付费推广网站正鹏建设工程有限公司网站
  • 视觉设计网站推荐网站建设要花多少钱
  • 渭南市住房和城乡建设局网站响应式网站微博视频教程
  • 哪个旅游网站可以做私人定制网站建设年度总结
  • 网站备案需要多久wordpress 删除作者
  • 网站流量评价有哪几方面wordpress网站数量管理插件
  • 通过ip直连打开网站要怎么做深圳房地产网站开发
  • 优质网站lnmp wordpress tp
  • 企业营销型网站案例网站建设平台讯息
  • 国外设计灵感网站cad使用视频在线观看
  • 企业网站建设需要哪些资料信息如何在大学网站做宣传
  • 罗湖商城网站设计价格智能科技网站模板