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

互联网百强企业排名宁波seo在线优化哪家好

互联网百强企业排名,宁波seo在线优化哪家好,设计师网络称呼,网站首页布局修改对于需要并行多公司并行处理的任务,方案是什么? 多线程、并行流、并发库(ExecutorService、Futrue、Callable),分布式计算(1)按照公司ID分片 (2)按照业务类型分片 处理…

对于需要并行多公司并行处理的任务,方案是什么?

多线程、并行流、并发库(ExecutorService、Futrue、Callable),分布式计算

(1)按照公司ID分片
(2)按照业务类型分片

处理某类任务,多个线程同时处理,拿到最先处理的完成接口

(1) 采用 CompletableFuture.anyOf(future1, future2, future3), 注意CompletableFuture使用自定义线程池,默认是ForkJoinPool线程池;案例

public class CompletableFutrueAnyOf {public static void main(String[] args) {ExecutorService executorService = Executors.newFixedThreadPool(3);CompletableFuture<String> future1 = CompletableFuture.supplyAsync(() -> {try {TimeUnit.SECONDS.sleep(3);} catch (InterruptedException e) {throw new RuntimeException(e);}return "futrue1 执行结果";},executorService);CompletableFuture<String> future2 = CompletableFuture.supplyAsync(() -> {try {TimeUnit.SECONDS.sleep(6);} catch (InterruptedException e) {throw new RuntimeException(e);}return "futrue2 执行结果";},executorService);CompletableFuture<String> future3 = CompletableFuture.supplyAsync(() -> {try {TimeUnit.SECONDS.sleep(2);} catch (InterruptedException e) {throw new RuntimeException(e);}return "futrue3 执行结果";},executorService);CompletableFuture<Object> objectCompletableFuture = CompletableFuture.anyOf(future1, future2, future3);try {System.out.println(objectCompletableFuture.get());} catch (InterruptedException e) {throw new RuntimeException(e);} catch (ExecutionException e) {throw new RuntimeException(e);}}
}

(2) Executor框架和Future接口实现
如果同时处理多个任务,只需要提交多个任务到线程池中即可。第一个完成的任务的结果会被get()方法返回

在并发查询某一类数据时,流量会全部打到存储,怎么优化该场景

(1)mybatis缓存,此方案只针对使用mybatis当作ORM框架,一级缓存是SqlSession级别的缓存
二级缓存:跨SqlSession级别,通常用于单表、多表会有脏数据
(2)缓存工具,比如redis,针对相同时间内的,相同查询条件,可以直接从结果返回数据;但是也有局限性:(比如分页),或者定时缓存到redis、后续直接从redis查,类似于热点数据缓存
(3)重复请求场景:前端限流,后端限流
(4)数据库层级的优化:索引、分片、查询语句优化、水平/垂直扩展等

Java ThreadPoolExecutor配置时,需要配置corePoolSize,maximumPoolSize、queueCapacity、以及拒绝策略,请描述随着线程池提交任务的增加,线程池创建线程的策略;

execute 执行原理

在这里插入图片描述
(1)提交任务后会首先进行当前工作线程数与核心线程数的比较,如果当前工作线程数小于核心线程数,则直接调用 addWorker() 方法创建一个核心线程去执行任务;
(2)如果工作线程数大于核心线程数,即线程池核心线程数已满,则新任务会被添加到阻塞队列中等待执行,当然,添加队列之前也会进行队列是否为空的判断;
(3)如果线程池里面存活的线程数已经等于核心线程数了,且阻塞队列已经满了,再会去判断当前线程数是否已经达到最大线程数 maximumPoolSize,如果没有达到,则会调用 addWorker() 方法创建一个非核心线程去执行任务;
(4)如果当前线程的数量已经达到了最大线程数时,当有新的任务提交过来时,会执行拒绝策略
整个顺序就是:优先核心线程、阻塞队列次之,最后非核心线程。

addWorker方法

可以看到execute中最关键的就是addWorker方法,它接受两个参数:
第一个参数是要执行的任务,如果为null那么会从等待队列中拉取任务;
第二个参数是表示是否核心线程,用来控制addWorker方法流程的;

在这里插入图片描述

线程池调用execute提交任务—>创建Worker(设置属性thead、firstTask)—>worker.thread.start()—>实际上调用的是worker.run()—>线程池的runWorker(worker)—>worker.firstTask.run();

http://www.yayakq.cn/news/596293/

相关文章:

  • 宁波营销型网站建设首选泰安网站建设价格
  • 自己做网站还是开通阿里巴巴诚信通上海网站怎么备案
  • 自己怎做网站广州建网站哪家最好
  • 网站开发参考书籍打开百度搜索
  • 做系统网站信息检索网站阿里云服务器官网入口
  • 网站建设 运维 管理包括有没有专业做挂的网站吗
  • 自己做的网站怎么才能在百度上查找网站开发需求调研
  • 飞翔时代网站建设湖南佳邦建设有限公司网站
  • 一建建设网站信息流优化师没经验可以做吗
  • 网站建设总结经验网页搜索怎么设置浏览器
  • 做网站后台的电子文库设计说明万能模板200字
  • 夫妻做网站萍乡网站设计公司
  • 网站建设程序的步骤过程网页设计素材背景图片
  • 做网站的带宽多少钱子网站建设
  • 公司网站建站哪个系统好用广东省建设信息网三库一平台官网
  • 公司门户网站建设费计入什么科目wordpress导航链接
  • 网站建设 企炬江阴百度wordpress插件
  • 网站关键词都没有了深圳网页制作与网站建设地址
  • 四川省建设厅门户网站js网页设计案例
  • 如何使用wp做网站微分销软件
  • 网站存在风险怎么解决济南建设工程信息网
  • 长春网站推广公司个人网站推荐
  • 网站开发的疑虑网站开发完要怎么部署
  • 在自己的网站上怎么做淘宝客抖音代运营机构常州
  • 帝国cms做笑话网站wordpress 留言功能
  • 网站推广教程上海建设工程检测网官网
  • 哪个网站做二手车买卖大厂县建设局网站
  • 网站后台字体安装网站开发的流程是怎样的
  • 网站建设升级网站开发与技术
  • 怎么免费申请网站域名龙南建设局网站