线程池的工作流程及饱和策略
2019-06-14 17:57:41 14 举报
线程池工作原理分类及饱和策略
作者其他创作
大纲/内容
没有需要执行的任务,线程空闲,由于数量等于核心线程数,无需销毁线程,各个线程监听阻塞队列等待新的任务
是
任务逐渐被执行完,队列内任务被清空
线程池工作流程图
否
当前活跃线程数是否已达到最大线程数
创建核心线程,执行任务
当前活跃线程数是否已达到核心线程数
线程池的饱和策略: 1.AbortPolicy:该策略在线程池饱和之后会直接抛出异常 2.DiscardPolicy:不做任何处理直接抛弃任务 3.DiscardOldestPolicy:将阻塞队列中的头元素出队抛弃,再尝试提交任务如果此时阻塞队列使用PriorityBlockingQueue优先级队列,将会导致优先级最高的任务被抛弃,因此不建议将该种策略配合优先级队列使用。 4.CallerRunsPolicy既不抛弃任务也不抛出异常,直接运行任务的run方法,换言之将任务回退给调用者来直接运行。使用该策略时线程池饱和后将由调用线程池的主线程自己来执行任务,因此在执行任务的这段时间里主线程无法再提交新任务,从而使线程池中工作线程有时间将正在处理的任务处理完成。
阻塞队列是否已满
线程池分类:1.newCacheThreadPool:创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收线程池,若无可回收,则新建线程。 2.newFixedThreadPool:创建一个固定大小线程池,可控制最大并发数,超出的线程会在队列中等待。 3.newScheduledThreadPool:创建一个固定大小的线程池,支持定时及周期性任务执行 4.newSingleThreadExcuto:创建一个单线程的线程池,他只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO、LIFO、优先级)执行。
当前线程是否大于核心线程数量
放入阻塞队列
当有线程空闲时间达到了保活时间将被销毁知道线程数量恢复核心线程数
创建普通线程执行任务
使用饱和策略
0 条评论
回复 删除
下一页