线程池往往用于处理任务
- 在日常的业务开发中,往往都是IO密集型任务而非CPU密集型任务。因此可以将线程池的核心线程设置为CPU核心数*2,以减少线程切换带来的消耗
- 由于线程池提交的任务处理有优先级,任务优先被核心线程处理,其次是进入队列,最后被最大线程数处理。因此需要额外注意队列的长度带来的影响,队列太长,容易撑爆。
- 可以监控队列。
- 根据线程池提供的API可以动态参数调整,也就是美团发布文章的动态线程池。
- 根据第二条描述,任务会相对优先进入队列,然后才拓展到最大线程,那么是不是可以先跑满最大线程呢,等最大线程都活跃起来了,气氛调动起来了,在把对于的方法放队列或者是进入reject
- Tomcat
- Dubbo
进入reject就结束了么,是不是还可以做点其他的事情呢,线程池都满了,难道不想知道线程都在做什么么,此时留下一个堆栈则是完美的保留现场。 除了jstack我们也可以获取到堆栈了,美滋滋。