线程池

优势 

降低系统资源消耗,通过重用已存在的线程,降低线程创建和销毁造成的消耗;

提高系统响应速度,当有任务到达时,无需等待新线程的创建便能立即执行;

③方便线程并发数的管控,线程若是无限制的创建,不仅会额外消耗大量系统资源,更是占用过多资源而阻塞系统或oom等状况,从而降低系统的稳定性。线程池能有效管控线程,统一分配、调优,提供资源使用率;

④更强大的功能,线程池提供了定时、定期以及可控线程数等功能的线程池,使用方便简单。

二 使用 创建 线程池 

  ExecutorService service =newThreadPoolExecutor(....);

publicThreadPoolExecutor(intcorePoolSize,intmaximumPoolSize,longkeepAliveTime, TimeUnit unit, BlockingQueue workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler)

corePoolSize  核心线程  

核心线程一直存活在线程池中,即便他们在线程池中处于闲置状态。除非我们将ThreadPoolExecutor的allowCoreThreadTimeOut属性设为true的时候

maximumPoolSize 最大线程数

keepAliveTime  时间 

非核心线程闲置时的超时时长,对于非核心线程,闲置时间超过这个时间,非核心线程就会被回收。只有对ThreadPoolExecutor的allowCoreThreadTimeOut属性设为true的时候,这个超时时间才会对核心线程产生效果。

unit  时间单位 

可以使用的单位有天(TimeUnit.DAYS),小时(TimeUnit.HOURS),分钟(TimeUnit.MINUTES),毫秒(TimeUnit.MILLISECONDS),微秒(TimeUnit.MICROSECONDS, 千分之一毫秒)和毫微秒(TimeUnit.NANOSECONDS, 千分之一微秒);

workQueue 阻塞队列 

通过线程池中的execute方法提交的Runable对象都会存储在该队列中。我们可以选择下面几个阻塞队列。

执行流程  

①如果在线程池中的线程数量没有达到核心的线程数量,这时候就回启动一个核心线程来执行任务。

②如果线程池中的线程数量已经超过核心线程数,这时候任务就会被插入到任务队列中排队等待执行。

③由于任务队列已满,无法将任务插入到任务队列中。这个时候如果线程池中的线程数量没有达到线程池所设定的最大值,那么这时候就会立即启动一个非核心线程来执行任务。

④如果线程池中的数量达到了所规定的最大值,那么就会拒绝执行此任务,这时候就会调用RejectedExecutionHandler中的rejectedExecution方法来通知调用者。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 为什么使用线程池 当我们在使用线程时,如果每次需要一个线程时都去创建一个线程,这样实现起来很简单,但是会有一个问题...
    闽越布衣阅读 4,456评论 10 45
  • 六月一过,便离开校园步入社会这个大熔炉,心里还真是觉得这是件让不愉快的事情,但却毫无办法。 身边的,所看到的同学,...
    毛十三呐阅读 653评论 0 1
  • [美乐爱觉]36天 20170109 1-老妈60大寿,兄弟姐妹齐聚哥哥家为老妈庆生。平时大家工作都很忙,虽然相...
    英曼绘生活阅读 1,739评论 1 1
  • 风怒吼着,摇动着树叶,雨瓢泼着把天地接在了一起。开着车的我不停的打着雨刷,心情也像这狂风暴雨的天一样,糟糟的。 “...
    淡然若怡阅读 256评论 0 0

友情链接更多精彩内容