`

spring--线程池的学习笔记

    博客分类:
  • J2EE
阅读更多

package com.spring.test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

import com.ysb.util.ConfigLocation;

/**
 *  简单线程池实现 
 * @author llg  2011-07-26
 *
 */
public class TestExecutor {

	public static void main(String[] args) {
		
		ApplicationContext app = new FileSystemXmlApplicationContext(
				ConfigLocation.getWebInfPath().concat("applicationContext.xml"));

		Executor executor = (Executor) app.getBean("executor");

		for (int i = 0; i < 25; i++) {
			executor.doExecute(new MessagePrinterTask("message: " + i));
		}
	}

}

class MessagePrinterTask implements Runnable {
	private String message;

	public MessagePrinterTask(String message) {
		this.message = message;
	}

	public void run() {
		try {
			System.out.println("start-->" + message);
			Thread.sleep(1000);
			System.out.println("end  -->" +message);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}

}




package com.spring.test;

import org.springframework.core.task.TaskExecutor;

public class Executor {

	private TaskExecutor taskExecutor;

	public void setTaskExecutor(TaskExecutor taskExecutor) {
		this.taskExecutor = taskExecutor;
	}

	public void doExecute(Runnable runnable) {
		this.taskExecutor.execute(runnable);
	}
}



application.xml 配置如下:
<bean id="threadPoolTaskExecutor"
		class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
		<property name="corePoolSize" value="2" /> <!-- 线程池活跃的线程数 -->
		<property name="maxPoolSize" value="10" /> <!-- 线程池最大活跃的线程数 -->
		<property name="queueCapacity" value="25" /> <!-- 队列的最大容量 -->
	</bean>
	<bean id="executor" class="com.spring.test.Executor">
		<!-- 
		<constructor-arg ref="taskExecutor" />
		 -->
		 <property name="taskExecutor" ref="threadPoolTaskExecutor"></property>
	</bean>



TaskExecutor类型
引用

在Spring发行包中预定义了一些TaskExecutor实现。有了它们,你甚至不需要再自行实现了。

SimpleAsyncTaskExecutor 类

这个实现不重用任何线程,或者说它每次调用都启动一个新线程。但是,它还是支持对并发总数设限,当超过线程并发总数限制时,阻塞新的调用,直到有位置被释放。如果你需要真正的池,请继续往下看。

SyncTaskExecutor类

这个实现不会异步执行。相反,每次调用都在发起调用的线程中执行。它的主要用处是在不需要多线程的时候,比如简单的test case。

ConcurrentTaskExecutor 类

这个实现是对Java 5 java.util.concurrent.Executor类的包装。有另一个备选, ThreadPoolTaskExecutor类,它暴露了Executor的配置参数作为bean属性。很少需要使用ConcurrentTaskExecutor, 但是如果ThreadPoolTaskExecutor不敷所需,ConcurrentTaskExecutor是另外一个备选。

SimpleThreadPoolTaskExecutor 类

这个实现实际上是Quartz的SimpleThreadPool类的子类,它会监听Spring的生命周期回调。当你有线程池,需要在Quartz和非Quartz组件中共用时,这是它的典型用处。

ThreadPoolTaskExecutor 类

它不支持任何对java.util.concurrent包的替换或者下行移植。Doug Lea和Dawid Kurzyniec对java.util.concurrent的实现都采用了不同的包结构,导致它们无法正确运行。
这个实现只能在Java 5环境中使用,但是却是这个环境中最常用的。它暴露的bean properties可以用来配置一个java.util.concurrent.ThreadPoolExecutor,把它包装到一个TaskExecutor中。如果你需要更加先进的类,比如ScheduledThreadPoolExecutor,我们建议你使用ConcurrentTaskExecutor来替代。

TimerTaskExecutor类

这个实现使用一个TimerTask作为其背后的实现。它和SyncTaskExecutor的不同在于,方法调用是在一个独立的线程中进行的,虽然在那个线程中是同步的。

WorkManagerTaskExecutor类

CommonJ 是BEA和IBM联合开发的一套规范。这些规范并非Java EE的标准,但它是BEA和IBM的应用服务器实现的共同标准
这个实现使用了CommonJ WorkManager作为其底层实现,是在Spring context中配置CommonJ WorkManager应用的最重要的类。和SimpleThreadPoolTaskExecutor类似,这个类实现了WorkManager接口,因此可以直接作为WorkManager使用。



官方文档:http://ajava.org/online/spring2.5/html/scheduling.html
分享到:
评论

相关推荐

    spring-scheduling-sr:org.springframework.scheduling包源码阅读笔记,学习如何用好Java执行器(高级并发对象)-Spring Framework 3.2.10-源码包

    在Spring Framework 3.2.10中,`org.springframework.scheduling`包是关于Spring调度功能的核心组件。这个包提供了全面的异步任务处理和定时任务管理能力,使得开发者能够轻松地实现定时任务和后台任务的执行。本文...

    Java架构面试专题(含答案)和学习笔记-1

    本资料包含学习笔记和答案,便于自我检验和理解。 1. **Java基础知识**: - **内存管理**:包括垃圾回收机制、内存泄漏及其检测方法、JVM内存模型(堆、栈、方法区等)。 - **数据类型与数据结构**:深入理解原始...

    java学习笔记,好好学习

    这些只是Java学习笔记可能涵盖的部分主题,实际笔记可能还会包括其他高级特性,如注解、Lambda表达式、并发工具类、JDBC数据库操作、Spring框架、Maven项目管理等。通过深入学习这些内容,你可以逐步提升Java编程...

    Java基础尚硅谷宋红康学习笔记

    9. **Spring框架**:Spring是Java企业级应用的主流框架,提供依赖注入、AOP、数据访问、Web应用等功能。 10. **Java并发编程**:包括线程池、锁机制(如synchronized、ReentrantLock)、并发容器(如...

    springboot412笔记记录分享网站--论文pf.zip

    在“springboot412笔记记录分享网站--论文pf.zip”这个压缩包中,我们可以推测其包含了关于SpringBoot 4.1.2版本的学习笔记和可能与论文撰写相关的资料。这可能是某位开发者或讲师在学习和实践SpringBoot过程中积累...

    Java 学习笔记

    以上只是Java学习笔记的部分内容,实际的学习过程中还会涉及到JVM原理、垃圾回收、数据库连接、框架应用(如Spring Boot、MyBatis)等更多高级主题。不断学习和实践,才能在Java的世界里游刃有余。

    《IT学习资料》-Java架构师学习.zip

    这个压缩文件包含了四个子目录:ConcurrentProgrammingStudyNotes、DistributedTopic、DistributedStudyNotes以及ConcurrentProgrammingTopic,它们分别对应并发编程的学习笔记、分布式专题、分布式学习笔记和并发...

    java-learn-note:Java学习笔记

    Java学习笔记是一个全面涵盖Java编程语言的资源集合,旨在帮助初学者和有经验的开发者深入理解和掌握Java核心技术。这个压缩包文件"java-learn-note-master"可能包含一系列的笔记、代码示例、教程和项目实践,是学习...

    java-demo:java学习笔记

    本Java学习笔记将深入探讨Java的核心概念、语法结构以及在实际开发中的应用。 1. **基础语法** - **变量与数据类型**:Java有八种基本数据类型,包括整型、浮点型、字符型和布尔型。此外,还有引用数据类型,如类...

    Java项目学习笔记: SSM实战项目-Java高并发秒杀API,详细流程+学习笔记

    在本Java项目学习笔记中,我们关注的是SSM(Spring、SpringMVC、MyBatis)框架下的高并发秒杀API实现。这是一个典型的电商场景,其中涉及到的技术点广泛且实用,对于提升Java开发者处理高并发问题的能力至关重要。...

    java学习笔记之大鹏JAVA终级总结

    Java学习笔记之大鹏JAVA终级总结,是针对Java编程语言深入学习和面试准备的一份综合资料。这份总结涵盖了从基础知识到高级概念的多个方面,旨在帮助初学者理解和掌握Java的核心概念,同时解决面试中可能出现的关键...

    《IT学习资料3》-Java架构师学习.zip

    首先,我们来看"ConcurrentProgrammingStudyNotes",这可能是一份关于Java并发编程的学习笔记。并发编程涉及线程管理、同步机制、锁、并发容器、并发工具类等内容。Java提供了丰富的API来支持并发,如`java.util....

    《IT学习资料》-SSM实战项目-Java高并发秒杀API,详细流程+学习笔记.zip

    这个项目涵盖了从项目初始化到实现完整的秒杀业务逻辑的全过程,同时附带了详细的学习笔记,方便学习者理解和实践。 1. **Spring框架**:Spring是Java企业级应用开发的核心框架,提供了依赖注入(DI)和面向切面...

    java校招学习笔记

    "java校招学习笔记"显然是针对应届毕业生或求职者准备的,旨在帮助他们掌握Java的基础知识和校招面试中常见的技术问题。这份笔记可能包含了从基础概念到进阶主题的全面概述,以提高求职者的竞争力。 首先,Java的...

    Java架构面试专题(含答案)和学习笔记(5).rar

    这个压缩包文件包含的学习笔记和答案,旨在帮助读者深入理解Java技术栈的关键点,提升解决问题的能力。以下是对Java架构面试中可能出现的一些关键知识点的详细说明: 1. **JVM(Java虚拟机)**: - 类加载机制:...

    java学习笔记源码MD.rar

    Java学习笔记源码MD.rar是一个压缩包,其中包含了一系列关于Java编程语言的学习资料,特别是针对JVM(Java虚拟机),Spring框架以及Java多线程等内容的深入探讨。这些主题是Java开发中的核心部分,对于任何想要提升...

    软件工程师的学习笔记,包含网络、操作系统、设计模式、JVM、多线程与高并发、Spring、MySQL......zip

    这篇学习笔记涵盖了软件工程师在职业发展中需要掌握的关键领域,包括网络、操作系统、设计模式、Java虚拟机(JVM)、多线程与高并发处理、Spring框架以及MySQL数据库。以下是对这些知识点的详细解读: 1. **网络**...

    Java后端学习笔记代码Java后端学习笔记代码

    本压缩包"Java后端学习笔记代码"显然是一个针对Java后端开发的学习资源集合,包含了作者在学习过程中编写的代码示例和笔记。以下是基于这个主题的详细知识点解析: 1. **Java基础**: 作为Java后端开发的起点,掌握...

    Java架构面试专题汇总(含答案)和学习笔记

    这份资源包含了详细的面试问题和答案,以及相关的学习笔记,旨在帮助Java工程师更好地准备面试,提升自身的技术素养。下面,我们将深入探讨其中可能涉及的一些核心知识点。 1. **Java基础** - **内存管理**:包括...

    java学习笔记基础和框架

    Java学习笔记基础与框架 Java是一种广泛使用的面向对象的编程语言,它的设计目标是具有简单性、面向对象、健壮性、安全性、可移植性等特点。这份“java学习笔记基础和框架”涵盖了从Java的基础概念到高级特性的全...

Global site tag (gtag.js) - Google Analytics