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

企业网站建设 企业官网定制网站设计官网

企业网站建设 企业官网定制,网站设计官网,长沙理工大学网络教学平台,自己怎么建设手机网站大家好#xff0c;我是伍六七。 今天阿七来聊聊 Java 程序员们面试、工作中经常会碰到的线程池。它的概念、原理、使用以及可能会碰到的一个坑。 一、Java 线程池基本概念 1、线程池的 7 个核心参数 这是 Java 初中级程序员们面试必问的面试题了#xff0c;我们来看…大家好我是伍六七。 今天阿七来聊聊 Java 程序员们面试、工作中经常会碰到的线程池。它的概念、原理、使用以及可能会碰到的一个坑。 一、Java 线程池基本概念 1、线程池的 7 个核心参数 这是 Java 初中级程序员们面试必问的面试题了我们来看 corePoolSize核心线程数 corePoolSize 是线程池中保持活动状态的最小线程数。 即使线程是空闲的它们也会一直保持在池中。 当有新任务提交时线程池会优先创建核心线程来处理任务。 maximumPoolSize最大线程数 maximumPoolSize 是线程池中允许的最大线程数。 如果任务数超过了核心线程数且任务队列已满线程池会创建新的线程但不会超过最大线程数。 keepAliveTime线程空闲时间 keepAliveTime 是非核心线程在空闲时可以存活的时间。 当线程空闲时间超过 keepAliveTime多余的非核心线程将被终止以减少资源消耗。 这个参数配合 TimeUnit 来定义时间单位。 unit时间单位 unit 是与 keepAliveTime 一起使用的时间单位。 它表示 keepAliveTime 的时间单位可以是秒、毫秒、微秒等。 workQueue任务队列 workQueue 是一个阻塞队列用于存储等待执行的任务。 当任务数超过核心线程数时多余的任务会被放入任务队列中。 常见的队列类型包括 LinkedBlockingQueue、ArrayBlockingQueue、SynchronousQueue 等。 threadFactory线程工厂 threadFactory 用于创建新线程。 可以通过自定义线程工厂来配置线程的名称、优先级、是否为守护线程等属性。 handler饱和策略 handler 是当工作队列和线程池都满了之后采取的饱和策略。 常见的饱和策略有 AbortPolicy默认抛出异常、CallerRunsPolicy由调用线程执行任务等。 这些参数在创建线程池时进行配置通过合理调整这些参数可以使线程池适应不同的工作负载和性能需求。例如通过调整核心线程数和最大线程数可以优化线程池在不同负载下的性能表现。 2、线程池是怎么运转的 举例来说核心线程数量为 5 个全部线程数量为 10 个工作队列的长度为 5。 刚开始都是在创建新的线程达到核心线程数量 5 个后新的任务进来后不再创建新的线程而是将任务加入工作队列 任务队列到达上线 5 个后新的任务又会创建新的普通线程直到达到线程池最大的线程数量 10 个 后面的任务则根据配置的饱和策略来处理。如果没有配置使用的是默认的配置 AbortPolicy:直接抛出异常。 当当前任务小于最大线程数的时候线程资源会保持核心线程池个数的线程其他超过的线程资源在存活时间时间之后会被回收。 二、Future 关键字 我们在项目中会经常使用 CompletableFuture 执行异步任务。那你知道 CompletableFuture 使用的是什么线程池吗这个线程池适合执行什么类型的任务呢 之前阿七刚转到互联网的时候就因为使用 CompletableFuture 不当被领导 diss 了。 我们看看源码 // 是否使用 useCommonPool如果cpu 的核数 -1大于 1使用 ForkJoinPool否则不使用线程池。private static final boolean useCommonPool (ForkJoinPool.getCommonPoolParallelism() 1); /*** Default executor -- ForkJoinPool.commonPool() unless it cannot* support parallelism.*/// 使用线程池还是创建普通线程private static final Executor asyncPool useCommonPool ForkJoinPool.commonPool() : new ThreadPerTaskExecutor(); /** Fallback if ForkJoinPool.commonPool() cannot support parallelism */static final class ThreadPerTaskExecutor implements Executor {public void execute(Runnable r) { new Thread(r).start(); }}我们看到默认情况下 CompletableFuture 会使用公共的 ForkJoinPool 线程池这个线程池默认创建的线程数是 CPU 的核数 PS也可以通过 JVM option:-Djava.util.concurrent.ForkJoinPool.common.parallelism 来设置 ForkJoinPool 线程池的线程数。 但是也不一定就使用 ForkJoinPool要看cpu 的核数 -1是否大于 1如果大于 1使用过 ForkJoinPool否则创建普通线程执行。 cpu 核数 Runtime.getRuntime().availableProcessors();我们要知道 CompletableFuture 获取返回是阻塞的那我们在执行 IO 操作的时候如果我们直接使用默认的线程池有很大概率是会阻塞其他操作的。 所以我们使用 CompletableFuture 的时候如果执行 CPU 操作可以使用默认线程池。 但是如果执行的是 IO 操作比如 DB 增删改查、接口调用等尽量使用自定义线程池。 三、自定义线程池 有些情况我们需要做到资源隔离比如上面使用 进行 IO 操作我们需要自定义线程池那我们怎么定义呢 3.1 ThreadPoolExecutor 我们可以使用 ThreadPoolExecutor指定核心参数进行线程吹创建。 ThreadPoolExecutor cutomerPoolExecutor new ThreadPoolExecutor(10,10,1,TimeUnit.DAYS,new ArrayBlockingQueue(1000),new NamedThreadFactory(business-operation-));创建好之后我们就可以往里面放任务了我们来看个例子 首先创建一个任务 // 测试任务sleep 1s模拟执行耗时任务 public class TestTask implements Runnable { Overridepublic void run() {try {Thread.sleep(1000L);} catch (InterruptedException e) {throw new RuntimeException(e);}} }把任务放到线程池中直接 submit 即可。 personalPoolExecutor.submit(new TestTask());3.2 怎么设置线程池的参数 线程池究竟设成多大是要看你给线程池处理什么样的任务任务类型不同线程池大小的设置方式也是不同的。 任务一般可分为CPU 密集型、IO 密集型、混合型对于不同类型的任务需要分配不同大小的线程池。 CPU 密集型任务 尽量使用较小的线程池一般为 CPU 核心数 1。 因为 CPU 密集型任务使得 CPU 使用率很高若开过多的线程数只能增加上下文切换的次数因此会带来额外的开销。 IO 密集型任务 可以使用稍大的线程池一般为 2*CPU 核心数。 IO 密集型任务 CPU 使用率并不高因此可以让 CPU 在等待 IO 的时候去处理别的任务充分利用 CPU 时间。 混合型任务 最佳线程数 CPU 核数 * [ 1 I/O 耗时 / CPU 耗时] 可以将任务分成 IO 密集型和 CPU 密集型任务然后分别用不同的线程池去处理。 只要分完之后两个任务的执行时间相差不大那么就会比串行执行来的高效。 因为如果划分之后两个任务执行时间相差甚远那么先执行完的任务就要等后执行完的任务最终的时间仍然取决于后执行完的任务而且还要加上任务拆分与合并的开销得不偿失。 你学会了嘛学会了点个赞再走 关注我送你全套我整理的 Java 岗位面试资料。这是我自己之前整理的面试题靠着这份面试题我从 30 人的小公司进了 2000 人的央企子公司之后又进了互联网大厂。 一份让我进大厂央企的面试题
http://www.yutouwan.com/news/386461/

相关文章:

  • 实惠的制作网站烟台建设工程信息网站
  • 个人网站是怎么样的什么网站做玩具的外贸
  • 网站开发语言windows小程序搭建是什么意思
  • 网站建设错误要点静态网站 服务器
  • 网站建设建设多少钱做网站实训心得
  • 如何设置网站icon做直播平台网站赚钱吗
  • 网站域名密码忘了建设高端网站公司
  • 做系统的网站淮北建设工程质量安全站网站
  • 国外哪些做问卷的网站成都创建公司网站
  • 昌平区手机网站制作服务模板网站很牛
  • 营销型网站制作培训怎么做手机app软件开发
  • 上海做网站哪家好互联网怎么打广告推广
  • 如何确定网站建设 栏目海南州商城网站建设
  • 企业做网站的注意什么问题做网站网页多少钱
  • 没有网站怎么做cpa广告保靖网站建设
  • 湖南建设银行2018招聘网站2008年互联网公司排名
  • 医疗类网站前置审批免费签名logo设计
  • 网站建设方法牜金手指下拉覀中国建设银行手机银行官网
  • 电子商务网站建设的目的和作用西安池乐科技网页设计
  • 网站视频如何下载长沙网络安全公司
  • 网站推广优化的方法莱芜雪野湖自驾游攻略
  • php网站验证码错误简单做网站需要学什么
  • 单页式网站做电音的软件的专业下载网站
  • 怎么把网页设置为不信任网站电子商城网站如何建设
  • 江苏和住房建设厅网站墨鱼wordpress
  • 点网站建设深圳建设招标网站首页
  • 台州市住房和城乡建设规划局网站全国企业信息查询系统登录
  • 免费网站你懂我意思正能量软件石家庄英文网站建设
  • 个人网站建设方法和过程一流 北京网站建设
  • html网站源码青岛商城网站开发