多线程与线程池

2017-10-18  本文已影响0人  wintersweett

项目最近遇到页面接口特别多的情况,特写此文

线程池的优势毋庸置疑:

1)重用线程池中的线程,避免大量的线程的创建和销毁所带来的性能开销。

2)能有效的控制线程的最大并发数,避免大量的线程之间因互相抢占系统资源而导致的阻塞现象

3)能够对线程进行简单的管理,并提供定时执行以及指定建个循环执行等功能

ThreadPoolExcutor是线程池的真正实现。他执行任务时大致遵循如下规则:

1)如果线程池中的线程数量未达到核心线程数量,那么会直接启动核心线程来开启任务。

2)如果线程池中的线程数量已经达到或者超过核心线程数量,那么任务会插入到任务队列中排队等待执行。

3)如果在2中无法将任务插入到任务队列中,往往是由于任务队列已满,这个时候如果线程数量未到线程数量的最大值,那么会立刻开启非核心线程来执行任务

4)如果线程池中线程数量已经达到最大值,那么就拒绝执行此任务,

四类常见的线程池

newFixedThreadPool:都是核心线程,数量固定,即使线程空闲,并不会被回收,无超时机制,任务队列无限制

newCachedThreadPool:只有非核心线程,数量不固定,超时时长60s,

newscheduledThreadPool:核心线程数量固定,非核心线程数量无限制,非核心线程空闲时,会立即被回收

newSingledThreadPool:内部只有一个核心线程

上一篇 下一篇

猜你喜欢

热点阅读