有关线程池知识

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

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

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

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

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

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

相关推荐
亚历克斯神1 小时前
低代码与 AI 的融合趋势——从可视化搭建到自然语言生成应用
java·spring·微服务
小江的记录本6 小时前
【AI Agent】《2026年9月 AI Agent全栈开发技术选型专项面试宝典》
java·spring boot·python·spring·ai·面试·ai编程
孙6903428 小时前
Spring 注入多例 Bean
java·spring
杨运交9 小时前
[065][缓存模块]Hibernate二级缓存自定义实现:基于Spring Cache的多级缓存适配器
spring·缓存·hibernate
2601_9620632311 小时前
【Spring Boot】掌握 Spring 事务:隔离级别与传播机制解读与应用
spring boot·spring·adb
不才不才不不才13 小时前
Spring 源码系列(25): @EnableTransactionManagement 与 TransactionInterceptor
java·数据库·spring
MetaLite13 小时前
Spring-Scheduled多实例重复执行怎么办-Redis分布式锁如何只让一个节点运行
redis·分布式·spring
catino14 小时前
spring-IOC、DI
java·spring·rpc
wear工程师15 小时前
Spring 循环依赖为什么要三级缓存:两级会把 AOP 代理弄丢
java·spring
AI人工智能+电脑小能手16 小时前
大白话说Java设计模式-42-访问者模式(业务实战篇)
java·spring·设计模式·访问者模式·asm·营销规则·数据结构与操作分离