V-xin:ruyuanhadeng获得600+页原创精品文章汇总PDF
目录
- 背景介绍
- 线程池的基本工作原理
- 线程池高并发场景下问题剖析
- 线程池高并发场景下性能优化
- 总结
背景介绍
大家好,今天给大家讲一个比较偏硬核技术类的知识,就是 Java 线程池在生产项目中的高并发优化。
可能很多兄弟都听说过 Java 线程池的理论原理,知道他是怎么运作的,但是从来没在项目里玩儿过 Java 线程池,更没在高并发环境下玩儿过 Java 线程池的优化,所以今天我们来一起探讨一下这个 Java 线程池在生产项目中的高并发优化!
线程池的基本工作原理
既然要聊线程池,那最起码大家得大概知道一点儿 Java 线程池的基本工作原理,如果要把线程池原理讲清楚,甚至剖析到 JDK 线程池的源码层面,那可能得单独开一篇文章来写,这不是我们这次的主题,所以我们就把线程池最简单的原理给大家讲一下先。
线程池,简单来说,就是他有一个池子,里面放了一堆的线程,这些线程一般是不会销毁的,他们会一直存在,然后你可以不停的给线程池提交任务。
线程池会拿线程出来执行你的任务,任务执行完了以后,线程不会终止,他就继续在线程池里待命就可以了。
我们看下图 1 所示:
但是这个时候会有一个关键的问题,那就是线程池里的线程数量通常是有限制的。
注意,这里说的是通常,因为 Java 线程池的真正原理来说,其实通过定制化手段,可以让 Java 线程池有各种各样不同的表现,我们这里就是说最基础的一种情况,那就是线程池里的线程数量是固定的,而且是有限的。
所有如果说你要是一下子提交了太多的任务给线程池,然后此时所有的线程都在忙着运行自己的任务呢,这个时候你要是再想提交新的任务,你觉得会如何?任务能提交进去吗?
看下图 2 所示:
那当然没