ITPub博客

首页 > 应用开发 > > 线程池原理及常用线程池介绍

线程池原理及常用线程池介绍

作者:unnamed persona 时间:2019-12-14 14:53:33 0 删除 编辑

线程池概述:

就是把一堆线程创建好了放在一个容器中(池子里),需要用的时候就直接拿出来用,用完之后再放回池子里。

线程池的好处:

降低资源消耗,降低了频繁创建线程和销毁线程的开销

提高响应速度

提高线程的可管理性,可以对线程进行一些操作,方便管理线程

线程池的图解:

线程池的运行过程:

线程池家族

线程池的最上层接口是Executor,这个接口定义了一个核心方法execute(Runnabel command),这个方法最后被ThreadPoolExecutor类实现,这个方法是用来传入任务的。而且ThreadPoolExecutor是线程池的核心类,此类的构造方法如下:

阻塞队列:

用来创建线程,一般有三种选择的阻塞队列。

ArrayBlockingQueue:有界队列(基于数组的)

LinkedBlockingQueue:有/无界队列(基于链表的,传参就是有界,不传就是无界)

SynchronousQueue:同步移交队列(需要一个线程调用put方法插入值,另一个线程调用take方法删除值)

handler:拒绝处理策略

当阻塞队列满了且线程数量大于最大线程数就会采用拒绝处理策略,四种策略为:

ThreadPoolExecutor.AbortPolicy:丢弃任务并抛出RejectedExecutionException异

ThreadPoolExecutor.DiscardPolicy:也是丢弃任务,但是不抛出异常

ThreadPoolExecutor.DiscardOldestPolicy:丢弃队列最前面的任务,然后重新尝试执行任务(重复此过程)

ThreadPoolExecutor.CallerRunsPolicy:由调用线程处理该任务

常用的线程池

newCachedThreadPool()

核心线程数为0,最大线程数几乎无限,阻塞队列使用的是 SynchronousQueue:同步移交队列

注意事项:使用时要注意控制线程的数量,防止因线程数太多导致OOM。

————————————————

版权声明:本文为CSDN博主「风幕浦」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/weixin_44397907/article/details/103510997

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69949628/viewspace-3118620/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-12-04

  • 博文量
    158
  • 访问量
    0