有关线程池知识

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

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

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

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

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

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

相关推荐
2401_894915533 小时前
GEO 定位优化源码搭建常见报错排查:数据库、伪静态、接口调试
java·数据库·网络协议·tcp/ip·spring·unity
wangjialelele4 小时前
Spring Cloud 全体系学习笔记(REST、Nacos、Feign、Gateway)
java·spring boot·笔记·学习·spring·spring cloud·gateway
玖石书4 小时前
ASP.NET Core迁移Spring对照系列:文件系统操作篇
spring·asp.net
xqqxqxxq5 小时前
吃透 Spring 高频注解(包含SpringMVC Spring Boot)
java·spring boot·spring
攻城有术17 小时前
专项攻克——spring、springMVC、springBoot、springCloud的启动流程
spring boot·spring·spring cloud
markinmarkin19 小时前
Spring 中有哪些方式可以把Bean 注入到IOC 容器?
java·spring
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ21 小时前
Spring‑AI Document 对象 JSON 字段详解
人工智能·spring·json
麻雀聊技术1 天前
一重启 AI 就失忆?用 Spring AI + PostgreSQL 3步搞定“长期记忆”持久化(附完整代码)
java·spring·openai
he___H1 天前
Spring-Configur注解
java·spring
铃木之影1 天前
Java 版本 RAG 示例(Spring AI + Milvus)
java·人工智能·spring