java线程池,你真的会用吗?

序言

我们日常开发中,用的线程池场景多吗?

程序员老9:没用过

程序员老6:很少用

大多数开发者的业务应用场景是数据量大,需要并发处理,提升效率

线程池怎么用

程序员老6:网上一搜,一大堆答案,复制、粘贴、测试、搞定

你有没有想过,线程不够用,怎么办,如何设置线程数,我网上有很少给你讲解这些问题,知识告知你怎么使用,如何更好的使用却没有讲。

线程池实践方案(推荐)

@Configuration
public class ThreadPoolTaskExecuteConfig {
    @Bean
    public ThreadPoolTaskExecutor threadPoolTaskExecutor() {
        ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
        taskExecutor.setCorePoolSize(5);
        taskExecutor.setMaxPoolSize(10);
        taskExecutor.setQueueCapacity(50);
        taskExecutor.setKeepAliveSeconds(60);
        taskExecutor.setThreadNamePrefix("myExecutor--");
        taskExecutor.setWaitForTasksToCompleteOnShutdown(true);
        taskExecutor.setAwaitTerminationSeconds(60);
        taskExecutor.setRejectedExecutionHandler(new CompositeRejectedHandler());
        taskExecutor.initialize();
        return taskExecutor;
    }
}

线程池参数配置:

没有绝对合理公式提供你计算线程数应该配置多少是最合适的,只有通过实践中进行调整

  • 增加线程监控
  • 自定义拒绝策略,进行日志打印以及使用由线程发起者进行调用

其它方案

  • 放入队列,重新提交到线程池进行执行
  • 进行睡眠,再次执行
  • 直接抛出异常
  • 创建新线程处理

总结

没有最好的方案,只有适合自己的方案,才是好的方案

线程池中队列满了,线程不够用,你是怎么处理,欢迎你留言评论

预告明天分享内容

nacos源码中你学习到什么

  • 代码规范
  • 线程池用法
  • nacos是如何服务注册
  • nacos是如何解决同一个服务注册与删除冲突问题
© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
一只爱偷懒的猫的头像 - 鹿快
评论 抢沙发

请登录后发表评论

    暂无评论内容