1.9、线程池的设计与原理解析

一.了解什么是池化技术

https://blog.csdn.net/wmdkanh/article/details/105442208

https://blog.csdn.net/weixin_30768661/article/details/98005333

https://blog.csdn.net/winter199/article/details/105818195

二.深入分析线程池的意义

https://www.cnblogs.com/kaffeetrinken/p/8548549.html

https://blog.csdn.net/qq_38729449/article/details/79452898 

https://blog.51cto.com/9527824/2435706

三.java中提供的线程池

https://www.cnblogs.com/zsh-blogs/p/11255527.html

https://www.cnblogs.com/amunote/p/10322294.html

https://blog.csdn.net/weixin_36759405/article/details/82825634 

四.思考线程池的设计哲学

五.阻塞队列在线程池中的应用

https://www.jianshu.com/p/8dcc81abde4d

http://ddrv.cn/a/27744 

六.线程池的实现原理分析

https://www.cnblogs.com/yujian0817/p/12703883.html

https://www.cnblogs.com/qlsem/p/11498970.html 

https://www.cnblogs.com/flgb/p/13062798.html

https://blog.csdn.net/programmer_at/article/details/79799267

七.线程池的使用注意事项

https://www.cnblogs.com/lijiasnong/p/9963242.html

https://blog.csdn.net/Moment_007/article/details/106455822

https://blog.csdn.net/weixin_30472035/article/details/97199334 

https://www.cnblogs.com/ltstar/p/12691125.html

虽然线程池能大大提高服务器的并发性能,但使用它也会存在一定风险。与所有多线程应用程序一样,用线程池构建的应用程序容易产生各种并发问题,如对共享资源的竞争和死锁。此外,如果线程池本身的实现不健壮,或者没有合理地使用线程池,还容易导致与线程池有关的死锁、系统资源不足和线程泄漏等问题。

1) 建议使用new ThreadPoolExecutor(…)的方式创建线程池

线程池的创建不应使用
Executors 去创建,而应该通过 ThreadPoolExecutor
创建,这样可以让读者更加明确地知道线程池的参数设置、运行规则,规避资源耗尽的风险,这一点在也阿里巴巴JAVA开发手册中也有明确要求。这一点不容小觑,曾有同学因为线程池使用不当导致生产的同一台机器上部署的多个应用都因无法创建线程池而出现故障。

2) 合理设置线程数

线程池的工作线程数设置应根据实际情况配置,CPU密集型业务(搜索、排序等)CPU空闲时间较少,线程数不能设置太多。

如果是CPU密集型任务,就需要尽量压榨CPU,参考值可以设为 NCPU+1

如果是IO密集型任务,参考值可以设置为2*NCPU

3) 设置能代表具体业务的线程名称

这样方便通过日志的线程名称识别所属业务。具体实现可以通过指定ThreadPoolExecutor的ThreadFactory参数。如使Spring提供的CustomizableThreadFactory。

以上就是Java线程池的详细介绍,除了从编程的角度应对高并发,更多还需要从架构设计的层面来应对高并发场景,例如:Redis缓存、MySQL数据库的优化、异步消息等

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值