0 0

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个答案 按时间排序 按投票排序

0 0

采纳的答案

父类中的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 开发的员工的季度绩效考核系统.zip

    最后,结果展示和反馈模块为员工提供查看个人绩效的地方,并允许他们提出疑问或建议。 在技术选型上,SpringBoot支持多种数据库,如MySQL、PostgreSQL等,可以根据项目需求选择合适的数据库管理系统。此外,系统...

    java技术论坛

    3. **并发编程**:Java中的线程管理、同步机制(如synchronized、volatile、Lock接口等)、并发容器(如ConcurrentHashMap、CopyOnWriteArrayList等)以及线程池的使用和设计。 4. **框架与库**:Spring框架的应用...

    Java面试宝典-大厂必备

    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. **内存...

    Java后端技术面试汇总.docx

    以上只是部分核心知识点的简要介绍,完整的学习和面试准备应涵盖更多细节,例如JVM内存模型、垃圾收集机制、设计模式、Spring框架、数据库连接池、网络编程等。建议结合源码阅读和实际项目经验深入学习。对于文档中...

    商城项目(Java后端实现 SpringBoot)

    主要使用SpringBoot + Mybatis-PLUS技术。内有文档对其中的代码做专业的解释 私信我发你链接是项目所实现的相关功能 其中使用了相关t定时任务功能以及对定时任务线程池的使用 若对项目有疑问,可以私信我一起讨论

    Java-Interview:https

    如果对你有帮助请点下 Star,有疑问欢迎提 ,有好的想法请提 。 常用集合 HashMap HashSet LinkedHashMap Java 多线程 多线程中的常见问题 synchronize 关键字原理 多线程的三大核心 对锁的一些认知 ReentrantLock ...

    JdonFramework5.3

    7. 性能优化:为了确保高效率运行,JdonFramework 5.3可能会内置一些性能优化策略,如缓存管理、线程池等,帮助开发者提升应用程序的运行速度和并发处理能力。 8. 文档与社区支持:www.jdon.com很可能是...

    Tomact 9.0 for mac

    - 调整`$CATALINA_HOME/conf/server.xml`中的配置,如增大连接器的线程池大小,调整内存分配等。 - 使用JVM的垃圾回收和内存调优,如设置 `-Xms` 和 `-Xmx` 参数。 - 开启日志分析工具,如JProfiler或VisualVM,...

    《Jetty6_指南书》

    - **整合Spring**: 如何将Jetty与Spring框架整合。 - **其他JEE技术**: 如何与其他JEE技术栈集成。 #### 十七、在开发环境中使用Jetty - **调试技巧**: 如何利用Jetty进行高效调试。 - **集成IDE**: 如何将Jetty...

Global site tag (gtag.js) - Google Analytics