有关线程池知识

一、线程池用了哪些设计模式

  • 工厂模式:Java中Executors类提供的newFixedThreadPool、newCachedThreadPool等静态方法,本质上是工厂方法,它们封装了TreabPoolExecutor复杂的参数配置,根据不同场景返回预配置的线程池实例,简化了用户创建线程池的操作。
  • 享元模式:线程池通过复用已创建的线程来执行多个任务,避免了频繁创建和销毁线程带来的资源消耗。线程作为"共享资源",在完成一个任务后不会被销毁,而是回到线程池等待新的任务,这对线程资源的共享复用,正是享元模式的典型应用,有效提高了系统的资源利用率。
  • 生产者--消费者模式:用户通过execute或submit方法提交任务,任务被放入阻塞队列中。线程池中的工作线程不断从队列中取出任务并执行。
  • 模板方法模式:ThreadPoolExecutor的execute方法定义了任务执行的整体流程框架:先尝试添加任务到核心线程,失败则加入队列,再失败则创建非核心线程,最后执行拒绝策略。

二、线程池中shutdown(),shutdownNow()这两个方法有什么作用?

  • shutdown调用后状态置为SHUTDOWN,已提交但未开始执行的队列任务仍会按顺序继续执行直到全部完成;只对处于空闲等待状态的worker线程调用interrupt()
  • shutdownNow为STOP,并试图停止使用正在执行的线程,不再处理还在池队中等待的任务,当然,它会返回那些执行的任务。

三、提交给线程池中的任务可以被撤回吗?

可以撤回,当向线程池提交任务时,会得到一个Future对象。这个Future对象提供了几种方法来管理任务的执行,包括取消任务。

相关推荐
霸道流氓气质1 天前
Spring AI Alibaba Copilot 项目使用指南
人工智能·spring·copilot
空中湖1 天前
Spring AI 多模型接入实战:OpenAI、Ollama、通义千问切换只需改配置
java·人工智能·spring
一路向北North1 天前
Spring Security OAuth2.0(25):分布式系统授权-拓展用户信息
java·后端·spring
@灯神1 天前
SpringAI系列|第1篇:SpringAI概述与快速上手
java·人工智能·spring·ai·ai编程
不才不才不不才1 天前
Spring AI 实战(7):向量库怎么选?PgVector/Redis/Milvus 横向对比
java·人工智能·spring·ai
XS0301061 天前
Spring AI第一课
数据库·人工智能·spring
半夜修仙1 天前
Spring集成邮箱功能
java·开发语言·spring boot·spring·rabbitmq·github·maven
宠友信息1 天前
从重复请求到订单同步看内容社区源码的处理思路
java·spring boot·redis·后端·mysql·spring
阿维的博客日记2 天前
MultipartFile 是不是表示仅仅是一个分片?
java·后端·spring·multipartfile