线程池实现原理
线程池就是控制运行的线程数量, 处理过程中将任务放到队列,然后在线程创建后启动这些任务,如果线程数量超出了最大数量就排队等候,等其他线程执行完毕再从队列中取出任务执行。线程池相当于银行网点,常驻核心数相当于今日当值資口,线程池能够同时执行的最大线程数相当于银行所有的窗口,任务队列相当于银行的候客区,当今日当值窗口满了,多出来的客户去候客区等待,当候客区满了,银行加开窗口,候客区先来的客户去加班窗口,当银行所有的窗口满了,其他客户在候客区等待,同时拒绝其他客户进入银行。当用户少了,加班的窗口等待时间 (相当于多余线程存活的时间)(等待时间的单位相当于unit参数)假设超过一个小时还是没有人来,就取消加班的窗口。
实际创建結程池:在实际使用的时候,选择线程池的时候尽量不用JDK提供的三种常风的创建方式因为它的底层队列是Linked这个接近于无界,非常大,这样会堆积大量的请求,从而导致OOM,阿里曾田开发手册 手我们使压 readPoalExecutor去创建线程池。并发高、业务执行时间长,解决这种米型任多的关 市在于整体架构的设计,看看这些业务里面某些数据是否能做缓存是第一步,我门的项目使用的时redis作大缓存 (文类非关系型数据库环是挺好的)。增加服务器是第二步(一般政府项目的首先,因为不用对项日技术做大改动,求一个稳,但前提是资金充足),“至于线程池的设置, ,设置艺考2 最后, 业务执行时间长的问题,也可能需要分析一下,看看能不能使用中间件 (任务时间过长的可以考虑拆分逻辑放入队列等操作) 对任务进行拆分和解親。