- Spring通过任务执行器(TaskExecutor)来实现多线程和并发编程的
- 可使用ThreadPoolTaskExecutor来实现基于线程池的TaskExecutor
- 在实际开发中由于多是异步,所以使用@EnableAsync来支持异步任务,且要在Bean的方法中使用@Async来声明其是一个异步任务
以下实例:
- 配置类
package com.zgw.taskexecutor; import java.util.concurrent.Executor; import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.AsyncConfigurer; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; @Configuration @ComponentScan("com.zgw.taskexecutor") @EnableAsync //开启对异步任务的支持 public class TaskExecutorConfig implements AsyncConfigurer { /** * 通过实现AsyncConfigurer接口,重写getAsyncExecutor()方法, * 返回一个ThreadPoolTaskExecutor对象,这样实现一个基于线程池 * TaskExecutor */ @Override public Executor getAsyncExecutor() { ThreadPoolTaskExecutor taskExecutor=new ThreadPoolTaskExecutor(); taskExecutor.setCorePoolSize(10); taskExecutor.setMaxPoolSize(20); taskExecutor.setQueueCapacity(25); taskExecutor.initialize(); return taskExecutor; } @Override public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() { return null; } }
- 任务执行类
package com.zgw.taskexecutor; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; @Service public class AsyncTaskService { @Async //声明是一个异步方法 public void executeAsyncTaskOne(int i){ System.out.println("执行异步任务: "+i); } @Async public void executeAsyncTaskTwo(int i){ System.out.println("执行异步任务加1操作:"+(i+1)); } }
3.运行
package com.zgw.taskexecutor; import org.springframework.context.annotation.AnnotationConfigApplicationContext; public class TestExecutor { public static void main(String[] args) { //使用AnnotationConfigApplicationContext作为spring容器, //接收输入一个配置类作为参数 AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(TaskExecutorConfig.class); //获得声明配置的AsyncTaskService的Bean AsyncTaskService asyncTaskService = context.getBean(AsyncTaskService.class); for(int i =0 ;i<20;i++){ asyncTaskService.executeAsyncTaskOne(i); asyncTaskService.executeAsyncTaskTwo(i);; } context.close(); } }
运行结果如下:
结果是并发执行而不是顺序执行的。
相关推荐
这套课程既可以作为从零基础开始...课程的主要内容涉及有JAVA基础课程、JAVA多线程与并发编程、数据库开发基础和进阶、Spring Framework、Spring进阶、Spring MVC框架、Spring boot、Java常用类库、Java异常处理等等
基于SpringBoot和POI实现单线程和多线程导出Excel.zip基于SpringBoot和POI实现单线程和多线程导出Excel.zip基于SpringBoot和POI实现单线程和多线程导出Excel.zip基于SpringBoot和POI实现单线程和多线程导出Excel.zip...
Java Spring多线程demo代码
1. SpringBoot 自定义线程池以及多线程间的异步调用(@Async、@EnableAsync) 2.Java多线程之定时任务 以及 SpringBoot多线程实现定时任务 3.@EnableScheduling 与 @Scheduled
基于java线程池、java Socket实现了一个简单的多线程Http服务器,可以实现GET资源获取功能、GET表单提交功能,POST 表单提交功能、单文件上传功能。
NULL 博文链接:https://dave-2009.iteye.com/blog/769637
适用多线程的SFTP类,支持代理服务器,是spring服务类,无需修改可直接与spring结合使用。 代码经过大量的并发使用验证,稳定可靠。 依赖的jar包如下: <groupId>com.jcraft</groupId> <artifactId>...
这个是spring 和 quartz的集成,quartz是单独的包,java线程的方式运行,利用自定义Jobfactory来解决spring注入service空指针的问题,简单实例执行main方法即可,很实用
JAVA多线程并发 JAVA基础 SPRING原理 微服务 等等 java核心知识点从0到1全包括 JVM 所有知识点技术点 JAVA集合 JAVA多线程并发 JAVA基础 SPRING原理 微服务 等等java核心知识点从0到1全包括 JVM 所有知识点技术点 ...
2021面试题、Java2021面试题、2022面试题、Java2022面试题、Java面试题、JVM面试题、多线程面试题、并发编程、设计模式面试题、Spring面试题、MyBatis面试题、ZooKeepe面试题r、Dubbo面试题、Elasticsearch面试题、...
系统功能包括: 创建用户、恢复用户、用户登录、系统各项...Java swing、Spring、Hibernate、MySql5、Socket、多线程、IO流、JDBC 开发工具:NetBeans7+JDK1.6 服务器地址和端口由config.properties配置,可任意移植
这份宝典囊括了Java编程中的基础知识、多线程编程、数据库操作、Spring框架、Spring Boot、Spring Cloud、Linux操作系统、分布式系统、设计模式、面试指导以及自我介绍等内容。 基础部分,包括Java编程语言的核心...
包含了JVM、java集合、多线程并发、java基础、spring生态原理、微服务、设计模式、NETTY与RPC、网络、日志、ZOOKEEPER、KAFKA、RABBITMQ、HBASE、MONGDB、CASSANDRA、负载均衡、数据库、一致性算法、java算法、数据...
java面试题 java基础、集合、多线程、jvm、Spring、mybatis等常见面试题
JAVA多线程实现方式主要有三种:继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程。其中前两种方式线程执行完后都没有返回值,只有最后一种是带返回值的。
JAVA开发语言中,调度程序实现的办法有很多,从最底层的线程到Timer,都是最基本的调度实现。当前很多开源项目也提供了比较全面的调度功能,如quartz、jcrontab、JobServer等,在这里我介绍一种比较简单的调度,没有...
Java学习笔记,内容包括JVM,spring,hashMap实现源码分析,多线程,剑指offer题解,设计模式。然后根据面试的重点,又将很多从里面抽出,专门整了个面试的分类,如果是看面试的东西的话,可以重点看这个。 | 书籍 |...
主要内容如下五点: 1.Java语言 2.多线程 3.Java多线程 4.Java多线程教学演示系统 5.总结与展望……
java面试宝典,包含java基础篇、多线程、spring、springboot、mysql、redis、mq等等经典面试问题。 具体内容目录见README.md文档