其他分享
首页 > 其他分享> > 线程池学习笔记

线程池学习笔记

作者:互联网

目录

初识线程池

为什么要使用线程池?

问题一:反复创建线程开销大

问题二:过多线程会占用太多内存

解决思路:

一、用少量线程 避免内存占用过多

二、让这部分线程都保持工作,且可以反复执行任务 避免生命周期的损耗

线程池的好处

线程池适用场合

线程池应用

创建和停止线程池

线程池构造方法的参数
参数名 类型 含义
corePoolSize int 核心线程数
maxPoolSize int 最大线程数
keepAliveTime long 保持存活时间
workQueue BlockingQueue 任务存储队列
threadFactory ThreadFacotry 当线程池需要新的线程的时候,会使用threadFactory来生产新的线程
Handler RejectedExecutionHandle 由于线程池无法接受你所提交的任务的拒绝策略
添加线程池规则:

![image-20210503024232344](/Users/sofia/Library/Application Support/typora-user-images/image-20210503024232344.png)

举个例子:

增减线程的特点
  1. 通过设置corePoolSize和maximumPoolSIze相同,就可以创建固定大小的线程池。
  2. 线程池希望保持较少的线程数,并且只有在负载变得很大时才增加它。
  3. 通过设置maximumPoolSize为很高的值,可以允许线程池容纳任意数量的并发任务。
  4. 只有在队列填满时才创建多余corePoolSize的线程,如果使用的是无界队列,那么线程池就不会超过corePoolSIze。
keepAliveTime
ThreadFactory
workQueue
线程池应该手动创建还是自动创建
线程池里的线程数量设置多少合适
对比各种线程池的特点

为什么newFixedTreadPool和SingleThreadExecutor的Queue用的LinkedBlockingQueue?

为什么CachedThredPool的Queue用的SynchronousQueue?

为什么CachedThredPool的Queue用的SynchronousQueue?

Parameter FiedThreadPool CachedThreadPool ScheduledThreadPool SingleThreaded
corePoolSize constructor-arg 0 constructor-arg 1
maxPoolSize same as corePoolSize Integer.MAX_VALUE Integer.MAX_VALUE 1
keepAliveTime 0 seconds 60 seconds 0 seconds 0 seconds

标签:队列,创建,笔记,学习,corePoolSize,任务,线程,SynchronousQueue
来源: https://www.cnblogs.com/greycdoer0/p/14730786.html