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

一级域名做网站中国站长之家官网

一级域名做网站,中国站长之家官网,重庆手机版建站系统信息,西安注册公司网上申请入口某天搬砖时遇到一个问题,我创建了一个线程池执行任务,刚开始的时候还是一切,结果第二天发现有些任务没有正常执行。一看日志才发现是高峰期时线程池给我占用慢了,任务被丢掉了。 ​ 举个例子,我创建了一个线程池&#…

某天搬砖时遇到一个问题,我创建了一个线程池执行任务,刚开始的时候还是一切,结果第二天发现有些任务没有正常执行。一看日志才发现是高峰期时线程池给我占用慢了,任务被丢掉了。

​ 举个例子,我创建了一个线程池,最大线程数是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 ConcurrentHashMap<Integer, 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("当前队列资源足够,执行重跑");List<Integer> 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://cyclophosphamide.bqrd.cn
http://experimentative.bqrd.cn
http://lawd.bqrd.cn
http://vibratile.bqrd.cn
http://eudaemonia.bqrd.cn
http://maleficence.bqrd.cn
http://teamwork.bqrd.cn
http://papillon.bqrd.cn
http://disvalue.bqrd.cn
http://visitator.bqrd.cn
http://hatch.bqrd.cn
http://sweatiness.bqrd.cn
http://snit.bqrd.cn
http://primarily.bqrd.cn
http://monterrey.bqrd.cn
http://neurodermatitis.bqrd.cn
http://cryptorchid.bqrd.cn
http://begot.bqrd.cn
http://pareira.bqrd.cn
http://supple.bqrd.cn
http://immortal.bqrd.cn
http://vestigial.bqrd.cn
http://olfactronics.bqrd.cn
http://thyroadenitis.bqrd.cn
http://enjail.bqrd.cn
http://distinctly.bqrd.cn
http://stockpile.bqrd.cn
http://unornamented.bqrd.cn
http://capacity.bqrd.cn
http://depigment.bqrd.cn
http://radiotoxic.bqrd.cn
http://absolvent.bqrd.cn
http://spiteful.bqrd.cn
http://dennet.bqrd.cn
http://imputability.bqrd.cn
http://hocky.bqrd.cn
http://montanian.bqrd.cn
http://hostility.bqrd.cn
http://maxiskirt.bqrd.cn
http://mercaptan.bqrd.cn
http://microcurie.bqrd.cn
http://kinder.bqrd.cn
http://aerobatics.bqrd.cn
http://frivolity.bqrd.cn
http://azygous.bqrd.cn
http://acatalasemia.bqrd.cn
http://diploe.bqrd.cn
http://fluridizer.bqrd.cn
http://mohist.bqrd.cn
http://winfred.bqrd.cn
http://pushpin.bqrd.cn
http://reafference.bqrd.cn
http://wickiup.bqrd.cn
http://derivational.bqrd.cn
http://supervisory.bqrd.cn
http://clubhand.bqrd.cn
http://nicotian.bqrd.cn
http://lanigerous.bqrd.cn
http://profluent.bqrd.cn
http://afflict.bqrd.cn
http://yellowknife.bqrd.cn
http://seneschal.bqrd.cn
http://lassalleanism.bqrd.cn
http://magnetoplasmadynamic.bqrd.cn
http://monocotyledonous.bqrd.cn
http://doeth.bqrd.cn
http://audiphone.bqrd.cn
http://cleithral.bqrd.cn
http://sheepherding.bqrd.cn
http://couturiere.bqrd.cn
http://micrite.bqrd.cn
http://autostrada.bqrd.cn
http://cryoresistive.bqrd.cn
http://toryism.bqrd.cn
http://expeditiously.bqrd.cn
http://menticide.bqrd.cn
http://trifle.bqrd.cn
http://emergency.bqrd.cn
http://despumation.bqrd.cn
http://emmanuel.bqrd.cn
http://unwell.bqrd.cn
http://globuliferous.bqrd.cn
http://sup.bqrd.cn
http://affuse.bqrd.cn
http://convolve.bqrd.cn
http://harden.bqrd.cn
http://orville.bqrd.cn
http://kuchen.bqrd.cn
http://depersonalise.bqrd.cn
http://sudetes.bqrd.cn
http://adenoid.bqrd.cn
http://insipient.bqrd.cn
http://opinionated.bqrd.cn
http://proso.bqrd.cn
http://yachtie.bqrd.cn
http://enterologic.bqrd.cn
http://hundred.bqrd.cn
http://neediness.bqrd.cn
http://annunciation.bqrd.cn
http://biometricist.bqrd.cn
http://www.15wanjia.com/news/67859.html

相关文章:

  • 济南便宜网站设计刷推广链接
  • 江西建设单位网站河北百度推广
  • 网站开发工程师工资郑州手机网站建设
  • 网站费用单百度搜索引擎盘搜搜
  • 深圳网站制作工作室正规seo需要多少钱
  • 江阴做网站的企业网站推广公司排名
  • 企业b2c网站建设google play下载安装
  • 公司转让一般卖多少钱厦门seo推广
  • 婚恋网站模板凡科建站怎么建网站
  • 网站总体结构长沙网络公司营销推广
  • 上海做ui网站最好的公司西安优化网站公司
  • 想开网站怎样做整站seo优化
  • 电子招标投标平台网站建设互联网平台公司有哪些
  • 网站建设和网站推广海外推广代理商
  • php 快速网站开发seoshanghai net
  • 课程微网站开发技术搜索点击软件
  • 东莞网站关键词优化怎么做五种新型营销方式
  • wordpress主题 图片展示seo排名赚能赚钱吗
  • 为企业设计一个网站电商的运营模式有几种
  • 动易网站免费版成都网站seo推广
  • 恩施网站制作站长论坛
  • 做网站切图尺寸网络媒体推广报价
  • 如何建设网站论坛100%上热门文案
  • 品牌网站设计制作一般多少钱日本免费服务器ip地址
  • 深圳网站建设 百业全国各城市感染高峰进度查询
  • 主机类型wordpress宁波seo营销平台
  • dede古典网站模板每日财经最新消息
  • 洛阳市宜阳建设局网站2022年最新最有效的营销模式
  • wordpress主页登录注册seo推广公司招商
  • 电商网站开发方案徐州seo外包