oriented-interview-questions-study / java-interview

后端面试每日 3+1
3 stars 0 forks source link

[基础] 第 5 天 线程池 #14

Open gaohanghang opened 5 years ago

gaohanghang commented 5 years ago

https://www.nowcoder.com/discuss/250485?type=2&order=3&pos=5&page=1

https://www.nowcoder.com/discuss/270890?type=2&order=0&pos=26&page=1

https://www.nowcoder.com/discuss/272576?type=2&order=3&pos=2&page=1

https://www.nowcoder.com/discuss/280129?type=2&order=3&pos=24&page=0

https://www.nowcoder.com/discuss/287424?type=2&order=0&pos=3&page=1

https://www.nowcoder.com/discuss/293917?type=2&order=3&pos=4&page=1

https://www.nowcoder.com/discuss/295747?type=2&order=0&pos=3&page=1

gaohanghang commented 5 years ago

原文来自 《码出高效:Java开发手册》

线程池

线程池的好处

线程使应用能够更加充分合理地协调利用 CPU、内存、网络、I/O等系统资源。线程的创建需要开辟虚拟机栈、本地方法栈、程序计数器等线程私有的内存空间。在线程销毁时需要回收这些系统资源。频繁地创建和销毁线程会浪费大量的系统资源,增加并发编程风险。另外, 在服务器负载过大的时候, 如何让新的线程等待或者友好地拒绝服务?这些都是线程自身无法解决的。 所以需要通过线程池协调多个线程 , 并实现类似主次线程隔离、定时执行、周期执行等任务。 线程池的作用包括:

在了解线程池的基本作用后, 我们学习下线程池是如何创建线程的。 首先从 ThreadPoolExecutor 构造方法讲起 , 学习如何自定义 ThreadFactory 和 RejectedExecutionHandler , 并编写一个最简单的线程池示例。 然后, 通过分析 ThreadPoolExecutor 的 execute 和 addWorker 两个核心方法, 学习如何把任务线程加入到线程池中运行。 ThreadPoolExecutor 的构造方法如下: