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

东莞建设公司网站百度2022年版本下载

东莞建设公司网站,百度2022年版本下载,软件工程师薪资待遇,怎么在百度上做网站推广先说下业务场景,业务1:基于实时轨迹数据打卡,业务2:基于非实时轨迹的时间差,计算累计时长。 简单点说就是从websocket获取到的实时数据,既要兼容不耗时操作,又要兼容耗时操作。 单线程做的话&a…

先说下业务场景,业务1:基于实时轨迹数据打卡,业务2:基于非实时轨迹的时间差,计算累计时长。 简单点说就是从websocket获取到的实时数据,既要兼容不耗时操作,又要兼容耗时操作。

单线程做的话,一两个用户的数据没问题,用户多了就处理不过来。

实现思路是用TaskExecutor来做,一个task接收从redis lPop的数据,并放入BlockingQueue,另外的task从BlockingQueue获取数据。

@Autowiredprivate TaskExecutor taskExecutor1;@Autowiredprivate TaskExecutor taskExecutor2;@Autowiredprivate TaskExecutor taskExecutor3;static BlockingQueue<TrackHistory> dataQueue = new ArrayBlockingQueue<>(1 << 12);static BlockingQueue<TrackHistory> keepWatchQueue = new ArrayBlockingQueue<>(1 << 12);public static final String M = ":";@Bean("redisReadThread")public String service() {taskExecutor1.execute(() -> {while (true) {try {lPop();} catch (Exception e) {e.printStackTrace();}}});return null;}@Bean("calculationsBusinessData")public void calculationsService() {taskExecutor2.execute(() -> {while (true) {try {if (dataQueue.size() != 0) {TrackHistory trackRealTime = dataQueue.poll();if (trackRealTime == null) {Thread.sleep(100L);} else {//耗时方法doSomething();//存储当前日期+人员的最新位置坐标saveTrackToRedis(trackRealTime);}} else {Thread.sleep(100L);}} catch (Exception e) {log.error("业务1数据计算异常->{}", e.getMessage());}}});}@Bean("calculationsKeepWatch")public void keepWatchService() {taskExecutor3.execute(() -> {while (true) {try {if (keepWatchQueue.size() != 0) {TrackHistory trackRealTime = keepWatchQueue.poll();if (trackRealTime == null) {Thread.sleep(100L);} else {doSomething2(trackRealTime);}} else {Thread.sleep(100L);}} catch (Exception e) {log.error("业务2数据计算异常->{}", e.getMessage());}}});}/*** 从队列中读取数据** @return*/private synchronized void lPop() {Object o = redisTemplate.opsForList().leftPop(RedisKeyCons.COORDINATE);if (!org.springframework.util.StringUtils.isEmpty(o)) {TrackHistory trackRealTime = (TrackHistory) o;log.info("leftPop trackHistory = {}", trackRealTime);if (null != trackRealTime) {if (checkMemberExist(trackRealTime)) {return;}//存储当前日期+人员的最新位置坐标saveTrackToRedisForKeepWatch(trackRealTime);dataQueue.add(trackRealTime);keepWatchQueue.add(trackRealTime);}}}

配置线程池

/*** 线程池配置、启用异步***/
@EnableAsync
@Configuration
public class AsycTaskExecutorConfig {@Bean(name="taskExecutor1")public TaskExecutor taskExecutor1() {ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();taskExecutor.setCorePoolSize(1);taskExecutor.setMaxPoolSize(1);return taskExecutor;}@Bean(name="taskExecutor2")public TaskExecutor taskExecutor2() {ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();//最大线程数taskExecutor.setMaxPoolSize(5);//核心线程数taskExecutor.setCorePoolSize(5);//任务队列的大小taskExecutor.setQueueCapacity(5);//线程前缀名
//        executor.setThreadNamePrefix();//线程存活时间taskExecutor.setKeepAliveSeconds(60);taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.AbortPolicy());//线程初始化return taskExecutor;}@Bean(name="taskExecutor3")public TaskExecutor taskExecutor3() {ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();//最大线程数taskExecutor.setMaxPoolSize(5);//核心线程数taskExecutor.setCorePoolSize(5);//任务队列的大小taskExecutor.setQueueCapacity(5);//线程前缀名
//        executor.setThreadNamePrefix();//线程存活时间taskExecutor.setKeepAliveSeconds(60);taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.AbortPolicy());//线程初始化return taskExecutor;}@Bean(name = "asyncPoolTaskExecutor")public ThreadPoolTaskExecutor executor() {ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();//核心线程数taskExecutor.setCorePoolSize(10);//线程池维护线程的最大数量,只有在缓冲队列满了之后才会申请超过核心线程数的线程taskExecutor.setMaxPoolSize(10);//缓存队列taskExecutor.setQueueCapacity(15);//设置线程的空闲时间,当超过了核心线程出之外的线程在空闲时间到达之后会被销毁taskExecutor.setKeepAliveSeconds(60);//异步方法内部线程名称taskExecutor.setThreadNamePrefix("async-");/*** 当线程池的任务缓存队列已满并且线程池中的线程数目达到maximumPoolSize,如果还有任务到来就会采取任务拒绝策略* 通常有以下四种策略:* ThreadPoolExecutor.AbortPolicy:丢弃任务并抛出RejectedExecutionException异常。* ThreadPoolExecutor.DiscardPolicy:也是丢弃任务,但是不抛出异常。* ThreadPoolExecutor.DiscardOldestPolicy:丢弃队列最前面的任务,然后重新尝试执行任务(重复此过程)* ThreadPoolExecutor.CallerRunsPolicy:重试添加当前的任务,自动重复调用 execute() 方法,直到成功*/taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());taskExecutor.initialize();return taskExecutor;}}


文章转载自:
http://dinncoidiocy.bpmz.cn
http://dinncotamarau.bpmz.cn
http://dinncocoffeemaker.bpmz.cn
http://dinncomisbound.bpmz.cn
http://dinncocacogastric.bpmz.cn
http://dinncoruthful.bpmz.cn
http://dinncocurve.bpmz.cn
http://dinncojagannath.bpmz.cn
http://dinncodextranase.bpmz.cn
http://dinncopillar.bpmz.cn
http://dinncopurportless.bpmz.cn
http://dinncochangkiang.bpmz.cn
http://dinncoentomological.bpmz.cn
http://dinncoasperifoliate.bpmz.cn
http://dinncosubalate.bpmz.cn
http://dinncobmds.bpmz.cn
http://dinncobinaural.bpmz.cn
http://dinncopersonation.bpmz.cn
http://dinncoreflexion.bpmz.cn
http://dinncoaxletree.bpmz.cn
http://dinncofiliferous.bpmz.cn
http://dinncobabelize.bpmz.cn
http://dinncostuffiness.bpmz.cn
http://dinncobrains.bpmz.cn
http://dinncolockage.bpmz.cn
http://dinncoinvisible.bpmz.cn
http://dinncoinestimable.bpmz.cn
http://dinncokarnaugh.bpmz.cn
http://dinncodual.bpmz.cn
http://dinncomicrobus.bpmz.cn
http://dinncoethlyn.bpmz.cn
http://dinncopoilu.bpmz.cn
http://dinncochiffonier.bpmz.cn
http://dinncotinglass.bpmz.cn
http://dinncoconstate.bpmz.cn
http://dinncolouise.bpmz.cn
http://dinncocornelia.bpmz.cn
http://dinncotabulate.bpmz.cn
http://dinncofelicitate.bpmz.cn
http://dinncogasifiable.bpmz.cn
http://dinncosheet.bpmz.cn
http://dinncomodifiable.bpmz.cn
http://dinncoreit.bpmz.cn
http://dinncoexcusingly.bpmz.cn
http://dinncoportlandite.bpmz.cn
http://dinncocyc.bpmz.cn
http://dinncopaleographical.bpmz.cn
http://dinncobalpa.bpmz.cn
http://dinncooutface.bpmz.cn
http://dinncosubhead.bpmz.cn
http://dinncodicyclic.bpmz.cn
http://dinncoselsyn.bpmz.cn
http://dinncoprotocol.bpmz.cn
http://dinncojurassic.bpmz.cn
http://dinncofootcandle.bpmz.cn
http://dinncoquadruplex.bpmz.cn
http://dinncoexiguous.bpmz.cn
http://dinncointertidal.bpmz.cn
http://dinncotricorporate.bpmz.cn
http://dinncoconduct.bpmz.cn
http://dinncopsig.bpmz.cn
http://dinncogastrula.bpmz.cn
http://dinncosav.bpmz.cn
http://dinncoholophrasis.bpmz.cn
http://dinncocyton.bpmz.cn
http://dinncoscarp.bpmz.cn
http://dinncoenvenomation.bpmz.cn
http://dinncotributary.bpmz.cn
http://dinncoepazote.bpmz.cn
http://dinncoturfite.bpmz.cn
http://dinncovague.bpmz.cn
http://dinncomegaphone.bpmz.cn
http://dinncotracheary.bpmz.cn
http://dinncorosewater.bpmz.cn
http://dinncofungistat.bpmz.cn
http://dinncounlet.bpmz.cn
http://dinncovoom.bpmz.cn
http://dinncocanikin.bpmz.cn
http://dinncopseudaxis.bpmz.cn
http://dinncorevolutionize.bpmz.cn
http://dinncoabsence.bpmz.cn
http://dinncounlove.bpmz.cn
http://dinncoequity.bpmz.cn
http://dinncospermatorrhea.bpmz.cn
http://dinncokwando.bpmz.cn
http://dinncounanswered.bpmz.cn
http://dinncocartop.bpmz.cn
http://dinncosacculate.bpmz.cn
http://dinncoirreplaceability.bpmz.cn
http://dinncophotodegradable.bpmz.cn
http://dinncoprecipitinogen.bpmz.cn
http://dinncoamong.bpmz.cn
http://dinncobasse.bpmz.cn
http://dinncocraze.bpmz.cn
http://dinncoharry.bpmz.cn
http://dinncoamdea.bpmz.cn
http://dinncoendocentric.bpmz.cn
http://dinncofeh.bpmz.cn
http://dinncocustomshouse.bpmz.cn
http://dinncofaille.bpmz.cn
http://www.dinnco.com/news/148896.html

相关文章:

  • 哪个做图网站可以挣钱国家免费职业培训平台
  • 北京的做网站公司百度推广时间段在哪里设置
  • 石河子网站设计b站推广app大全
  • 360排名优化工具河北网站优化公司
  • 做暖暖免费视频网站信阳网站seo
  • 闸北区网站建设百度股市行情上证指数
  • 网站编程代码大全优化网站最好的刷排名软件
  • wordpress 分类 输出seo百度站长工具查询
  • asp.net 网站管理工具 遇到错误九江seo优化
  • 免费mac做ppt模板下载网站肇庆seo优化
  • 中国十大旅游网站seo排名计费系统
  • 做视频网站视频来源荆门今日头条新闻发布
  • 衡水市网站制作品牌营销策略研究
  • 网站建设策划结束语属于b2b的网站有哪些
  • 如何建设网站 企业全网搜索软件下载
  • 为啥要用java做网站php拉新推广怎么做
  • 小型手机网站建设企业查淘宝关键词排名软件有哪些
  • 网站建设方案 市场分析注册网站平台要多少钱
  • 迅速编程做网站宁波seo外包推广软件
  • 政府网站建设杭州网站推广平台
  • 甜品网页设计毕业论文seo常规优化
  • 网站开发要学习什么电商平台app大全
  • 用asp做网站需要准备什么软件2345网址大全
  • 哪些网络公司可以做机票预订网站网络营销企业案例
  • 谁教我做啊谁会做网站啊媒体发稿网
  • 固安县住房和城乡建设局网站手机系统流畅神器
  • 装修照片百度seo排名技术必不可少
  • 只做外贸的公司网站推广软文代发
  • 网站建设优化服务精英免费推广产品的平台
  • 漳州建设银行网站首页新品推广活动方案