受限于硬件、内存和性能,我们不可能无限制的创建任意数量的线程,每一台机器允许的最大线程是一个有界值。因此ThreadPoolExecutor管理的线程数量是有界的。线程池就是用这些有限个数的线程,去执行提交的任务。但是对于多用户、高并发的应用来说,提交的任务数量非常巨大,会比允许的最大线程数多很多。为了解决这个问题,必须要引入排队机制,或者是在内存中,或者是在硬盘等容量很大的存储介质中。Java的ThreadPoolExecutor只支持任务在内存中排队,通过BlockingQueue暂存还没有来得及执行的任务。
线程的管理是比较复杂的,这会涉及线程数量、等待/唤醒、同步/锁、线程创建和死亡等问题。
ThreadPoolExecutor中的这七大参数,共同负责着线程池中的线程的创建和销毁
- int corePoolSize
- int maximumPoolSize
- long keepAliveTime
- TimeUnit unit
- BlockingQueue workQueue
- ThreadFactory threadFactory
- RejectedExecutionHandler handler