h5做网站用什么框架,icp备案后要建网站吗,官网设计费用报价,泉州做网站优化的公司一、线程池
在程序启动的时候就创建若干线程来响应处理#xff0c;它们被称为线程池#xff0c;里面的线程叫工作线程
#xff08;1#xff09;线程池的作用 1、降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 2、提高响应速度。当任务到达时它们被称为线程池里面的线程叫工作线程
1线程池的作用 1、降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 2、提高响应速度。当任务到达时任务可以不需要等到线程创建就能立即执行。 3、提高线程的可管理性。2常用线程池
ExecutorService 是主要的实现类
1、newSingleThreadExecutor
创建一个单线程化的线程池它只会用唯一的工作线程来执行任务 保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行 适用场景任务少 并且不需要并发执行 2、newCachedThreadPool
创建一个可缓存线程池如果线程池长度超过处理需要可灵活回收空闲线程若无可回收则新建线程. 适用场景处理任务速度 提交任务速度,耗时少的任务(避免无限新增线程) 3、newFixedThreadPool
创建一个定长线程池可控制线程最大并发数超出的线程会在队列中等待。 4、newScheduledThreadPool
创建一个定长线程池支持定时及周期性任务执行
3ThreadPoolExecutor构造方法参数说明
1、corePoolSize
核心线程数默认情况下核心线程会一直存活即使处于闲置状态也不会受存keepAliveTime限制。除非将allowCoreThreadTimeOut设置为true。 2、maximumPoolSize
线程池所能容纳的最大线程数。超过这个数的线程将被阻塞。当任务队列为没有设置大小的LinkedBlockingDeque时这个值无效。 3、keepAliveTime
非核心线程的闲置超时时间超过这个时间就会被回收。 4、unit
指定keepAliveTime的单位如TimeUnit.SECONDS。当将allowCoreThreadTimeOut设置为true时对corePoolSize生效。 5、workQueue
线程池中的任务队列常用的有三种队列SynchronousQueueLinkedBlockingDequeArrayBlockingQueue。
6、threadFactory
线程工厂提供创建新线程的功能。ThreadFactory是一个接口只有一个方法
4线程池原理 1、当前池大小 poolSize 小于 corePoolSize 则创建新线程执行任务。 2、当前池大小 poolSize 大于 corePoolSize 且等待队列未满则进入等待队列 3、当前池大小 poolSize 大于 corePoolSize 且小于 maximumPoolSize 且等待队列已满则创建新线程执行任务。 4、当前池大小 poolSize 大于 corePoolSize 且大于 maximumPoolSize 且等待队列已满则调用拒绝策略来处理该任务。 线程池里的每个线程执行完任务后不会立刻退出而是会去检查下等待队列里是否还有线程任务需要执行如果在 keepAliveTime 里等不到新的任务了那么线程就会退出。5Executor拒绝策略 1、AbortPolicy
为java线程池默认的阻塞策略不执行此任务而且直接抛出一个运行时异常切记ThreadPoolExecutor.execute需要try catch否则程序会直接退出. 2、DiscardPolicy
直接抛弃任务不执行空方法 3、DiscardOldestPolicy
从队列里面抛弃head的一个任务并再次execute 此task。 4、CallerRunsPolicy
在调用execute的线程里面执行此command会阻塞入 用户自定义拒绝策略:实现RejectedExecutionHandler并自己定义策略模式