-
spring 线程池疑问?5
哪位大神知道 spring封装的线程池 源码里面
ExecutorConfigurationSupport
成员变量
private ExecutorService executor;
ThreadPoolTaskExecutor类 继承ExecutorConfigurationSupport类
成员变量
private ThreadPoolExecutor threadPoolExecutor;
方法
protected ExecutorService initializeExecutor(
ThreadFactory threadFactory, RejectedExecutionHandler rejectedExecutionHandler) {
BlockingQueue<Runnable> queue = createQueue(this.queueCapacity);
ThreadPoolExecutor executor = new ThreadPoolExecutor(this.corePoolSize, this.maxPoolSize, this.keepAliveSeconds, TimeUnit.SECONDS,queue, threadFactory, rejectedExecutionHandler);
if (this.allowCoreThreadTimeOut) {
executor.allowCoreThreadTimeOut(true);
}
this.threadPoolExecutor = executor;
return executor;
}
ThreadPoolTaskExecutor任务执行是采用的自身成员变量
private ThreadPoolExecutor threadPoolExecutor;
那么父类ExecutorConfigurationSupport的成员变量private ExecutorService executor;虽然初始化了,实际没有用到
请问这里面是什么原因?
ExecutorConfigurationSupport类初始化方法
public void initialize() {
if (logger.isInfoEnabled()) {
logger.info("Initializing ExecutorService " + (this.beanName != null ? " '" + this.beanName + "'" : ""));
}
if (!this.threadNamePrefixSet && this.beanName != null) {
setThreadNamePrefix(this.beanName + "-");
}
this.executor = initializeExecutor(this.threadFactory, this.rejectedExecutionHandler);
}
抽象方法由子类ThreadPoolTaskExecutor实现
protected abstract ExecutorService initializeExecutor(
ThreadFactory threadFactory, RejectedExecutionHandler rejectedExecutionHandler);
问题补充:ThreadPoolTaskExecutor类获取线程执行器
public ThreadPoolExecutor getThreadPoolExecutor() throws IllegalStateException {
Assert.state(this.threadPoolExecutor != null, "ThreadPoolTaskExecutor not initialized");
return this.threadPoolExecutor;
}
问题补充:可是ThreadPoolTaskExecutor类实际是调用的自身的成员变量
它并没有调用父类ExecutorConfigurationSupport的成员变量private ExecutorService executor;
下面是ThreadPoolTaskExecutor类的方法
public ThreadPoolExecutor getThreadPoolExecutor() throws IllegalStateException {
Assert.state(this.threadPoolExecutor != null, "ThreadPoolTaskExecutor not initialized");
return this.threadPoolExecutor;
}
执行任务也是用的这个成员变量this.threadPoolExecutor
public void execute(Runnable task) {
Executor executor = getThreadPoolExecutor();
try {
executor.execute(task);
}
catch (RejectedExecutionException ex) {
throw new TaskRejectedException("Executor [" + executor + "] did not accept task: " + task, ex);
}
}
那么这里我不解的是 父类ExecutorConfigurationSupport的成员变量private ExecutorService executor;
虽然有它的初始化 销毁方法 可是实际上在执行任务的时候并没有用到?2012年12月17日 11:34
1个答案 按时间排序 按投票排序
-
采纳的答案
父类中的executor 是用到的:
public void shutdown() { if (logger.isInfoEnabled()) { logger.info("Shutting down ExecutorService" + (this.beanName != null ? " '" + this.beanName + "'" : "")); } if (this.waitForTasksToCompleteOnShutdown) { this.executor.shutdown(); } else { this.executor.shutdownNow(); } }
用于停止executor时使用
ThreadPoolExecutor是池化的Executor实现,我们可以实现其他的;
就像struts2的Action 与 ActionSupport一样,ActionSupport提供了如验证、国际化的功能,我们可以复用它,但不一定使用它2012年12月17日 13:20
相关推荐
最后,结果展示和反馈模块为员工提供查看个人绩效的地方,并允许他们提出疑问或建议。 在技术选型上,SpringBoot支持多种数据库,如MySQL、PostgreSQL等,可以根据项目需求选择合适的数据库管理系统。此外,系统...
3. **并发编程**:Java中的线程管理、同步机制(如synchronized、volatile、Lock接口等)、并发容器(如ConcurrentHashMap、CopyOnWriteArrayList等)以及线程池的使用和设计。 4. **框架与库**:Spring框架的应用...
9. **框架知识**:Spring框架的核心概念,如IOC、AOP,以及Spring Boot和Spring Cloud的相关知识。 10. **分布式与微服务**:理解分布式系统的挑战,如CAP理论、分布式一致性(Raft、Paxos等),了解Dubbo、...
4. **Spring框架**:IoC容器、AOP代理、事务管理、Spring Boot、Spring Cloud等相关概念。 5. **数据库**:SQL查询优化、事务隔离级别、索引原理、存储引擎的区别。 其次,C/C++面试的重点可能包含: 1. **内存...
以上只是部分核心知识点的简要介绍,完整的学习和面试准备应涵盖更多细节,例如JVM内存模型、垃圾收集机制、设计模式、Spring框架、数据库连接池、网络编程等。建议结合源码阅读和实际项目经验深入学习。对于文档中...
主要使用SpringBoot + Mybatis-PLUS技术。内有文档对其中的代码做专业的解释 私信我发你链接是项目所实现的相关功能 其中使用了相关t定时任务功能以及对定时任务线程池的使用 若对项目有疑问,可以私信我一起讨论
如果对你有帮助请点下 Star,有疑问欢迎提 ,有好的想法请提 。 常用集合 HashMap HashSet LinkedHashMap Java 多线程 多线程中的常见问题 synchronize 关键字原理 多线程的三大核心 对锁的一些认知 ReentrantLock ...
7. 性能优化:为了确保高效率运行,JdonFramework 5.3可能会内置一些性能优化策略,如缓存管理、线程池等,帮助开发者提升应用程序的运行速度和并发处理能力。 8. 文档与社区支持:www.jdon.com很可能是...
- 调整`$CATALINA_HOME/conf/server.xml`中的配置,如增大连接器的线程池大小,调整内存分配等。 - 使用JVM的垃圾回收和内存调优,如设置 `-Xms` 和 `-Xmx` 参数。 - 开启日志分析工具,如JProfiler或VisualVM,...
- **整合Spring**: 如何将Jetty与Spring框架整合。 - **其他JEE技术**: 如何与其他JEE技术栈集成。 #### 十七、在开发环境中使用Jetty - **调试技巧**: 如何利用Jetty进行高效调试。 - **集成IDE**: 如何将Jetty...