java的线程池说白了就是建一个任务池子跟一个线程池子,当任务池子里的任务过来了就由线程池里的活跃线程去消费,等任务池子里的任务太多了超过核心线程数,那就启动别的线程,当线程数又超过了最大线程数那任务就只能去排队了。
线程池解决的问题
- 频繁申请/销毁资源和调度资源,将带来额外的消耗,可能会非常巨大。
- 对资源无限申请缺少抑制手段,易引发系统资源耗尽的风险。
- 系统无法合理管理内部的资源分布,会降低系统的稳定性。
线程池的底层存储结构就是一个HashSet,把新建的线程放到HashSet中,通过ReentrantLock锁保证线程安全。线程池的核心是锁、阻塞队列、hashSet。