一.java线程池的核心参数及工作原理
核心参数:
corePoolSize:核心线程数,当线程数小于该值时,线程池会优先创建新线程来执行任务,如果调用了线程池的prestartAllCoreThreads方法,线程池会提前创建并启动所有基本线程,除非设置了allowCoreThreadTimeOut,否则核心线程将持续保留在线程池中即时没有新的任务提交过来。
maximumPoolSize:最大线程数,即线程池所能允许创建的最大线程数量。
keepAliveTime:空闲线程存活时间,当线程数量大于核心线程数时,这是多余空闲线程在终止之前等待新任务的最长时间。
unit:keepAliveTime数值的时间单位。
workQueue:任务队列,用于缓存未执行的任务,队列一直会持有任务直到有线程开始执行它。
threadFactory:线程工厂,可以通过工厂创建更具识别性质的线程,如线程名字等。
handler:拒绝策略,当线程和队列都处于饱和时就使用拒绝策略来处理新任务。
工作流程:
阻塞队列
构造函数中的队列允许我们自定义,队列的意义在于缓存无法得到线程执行的任务,当线程数量大于corePoolSize而当前workQueue还没有满时,就需要将任务放置到队列中。JDK提供了几种类型的队列容器,每种类型都具各自特点,可以根据实际场景和需要自行配置到线程池中。
ArrayBlockingQueue:
有界队列,基于数组结构,按照队列FIFO原则对元素排序;
LinkedBlockingQueue:
无界队列,基于链表结构,按照队列FIFO原则对元素排序,Executors.newFixedThreadPool()使用了这个队列;
SynchronousQueue:
同步队列,该队列不存储元素,每个插入操作必须等待另一个线程调用移除操作,否则插入操作会一直被阻塞,Executors.newCachedThreadPool()使用了这个队列;
PriorityBlockingQueue:
优先级队列,具有优先级的无限阻塞队列。
拒绝策略
拒绝策略(RejectedExecutionHandler)也称饱和策略,当线程数量和队列都达到饱和时,就采用饱和策略来处理新提交过来的任务,默认情况下采用的策略是抛出异常(AbortPolicy),表示无法处理直接抛出异常,其实JDK提供了四种策略,也很好记,拒绝策略无非就是抛异常、执行或者丢弃任务,其中丢弃任务就分为丢弃自己或者丢弃队列中最老的任务,下面简要说明一下:
AbortPolicy:丢弃新任务,并抛出 RejectedExecutionException
DiscardPolicy:不做任何操作,直接丢弃新任务
DiscardOldestPolicy:丢弃队列队首(最老)的元素,并执行新任务
CallerRunsPolicy:由当前调用线程来执行新任务
如何设置核心线程数的大小
性质不同的任务可以用不同规模的线程池分开处理。CPU密集型任务配置尽可能少的线程数量,如配置Ncpu+1个线程的线程池,以减少线程切换带来的性能开销。IO密集型任务则由于需要等待IO操作,线程并不是一直在执行任务,则配置尽可能多的线程,如2*Ncpu。混合型的任务,如果可以拆分,则将其拆分成一个CPU密集型任务和一个IO密集型任务,只要这两个任务执行的时间相差不是太大,那么分解后执行的吞吐率要高于串行执行的吞吐率,如果这两个任务执行时间相差太大,则没必要进行分解。我们可以通过Runtime.getRuntime().availableProcessors()方法获得当前设备的CPU个数。
二.synchronized工作原理
https://blog.csdn.net/javazejian/article/details/72828483
三.Threadlocal工作原理
https://blog.csdn.net/zhang_zhenwei/article/details/90051849?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&dist_request_id=&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control
四.HashMap底层原理
https://my.oschina.net/u/2307589/blog/1800587
五.jdk8新特性
https://blog.csdn.net/wwwvipp/article/details/104040377
六.Java 中的IO
https://editor.csdn.net/md/?articleId=115122056