首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

【JavaP6大纲】多线程篇:线程池实现原理

线程池就是控制运行的线程数量,处理过程中将任务放到队列,然后在线程创建后启动这些任务,如果线程数量超出了最大数量就排队等候,等其他线程执行完毕再从队列中取出任务执行。线程池相当于银行网点,常驻核心数相当于今日当值窗口,线程池能够同时执行的最大线程数相当于银行所有的窗口,任务队列相当于银行的候客区,当今日当值窗口满了,多出来的客户去候客区等待,当候客区满了,银行加开窗口,候客区先来的客户去加班窗口,当银行所有的窗口满了,其他客户在候客区等待,同时拒绝其他客户进入银行。当用户少了,加班的窗口等待时间(相当于多余线程存活的时间)(等待时间的单位相当于unit参数)假设超过一个小时还是没有人来,就取消加班的窗口。

02

[微服务感悟] 服务雪崩与熔断器

之前工作中出现了这样的一个问题,有一个业务服务,它的功能是政府某部门的文件流转柜。那个业务中原本每个外部请求都有一个独立的线程池去处理任务,后来听说spring支持全局的线程池。我们为了便于管理所有的线程,于是用spring建立一个全局现场池,让所有异步请求都从spring提供的全局线程池拿线程执行。当时的异步调用有发送短信,同步政府某部门业务数据等功能。有一天,我们的客户反馈投件之后没有发送短信,我们查看日志发现是线程池中堆积了很多同步政府业务数据的任务,日志显示所有的同步数据的请求都超时了。考虑这个外部请求只会在一些极少数的校验业务中出现,不是主要业务,于是我们紧急的停掉了这个政府接口调用,重新上线,用户又可以收到短信了

01
领券