迪庆北京网站建设,营销渠道策略怎么写,wordpress关键字回复,直接用ip地址的网站怎么做Spring通过任务执行器(TaskExecutor)来实现多线程和并发编程的可使用ThreadPoolTaskExecutor来实现基于线程池的TaskExecutor在实际开发中由于多是异步#xff0c;所以使用EnableAsync来支持异步任务#xff0c;且要在Bean的方法中使用Async来声明其是一个异步任务?????…Spring通过任务执行器(TaskExecutor)来实现多线程和并发编程的可使用ThreadPoolTaskExecutor来实现基于线程池的TaskExecutor在实际开发中由于多是异步所以使用EnableAsync来支持异步任务且要在Bean的方法中使用Async来声明其是一个异步任务????? 以下实例??? 配置类class配置类TaskExecutorConfig namecodepackage 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;ConfigurationComponentScan(com.zgw.taskexecutor)EnableAsync //开启对异步任务的支持public class TaskExecutorConfig implements AsyncConfigurer {/*** 通过实现AsyncConfigurer接口重写getAsyncExecutor()方法* 返回一个ThreadPoolTaskExecutor对象这样实现一个基于线程池* TaskExecutor*/Overridepublic Executor getAsyncExecutor() {ThreadPoolTaskExecutor taskExecutornew ThreadPoolTaskExecutor();taskExecutor.setCorePoolSize(10);taskExecutor.setMaxPoolSize(20);taskExecutor.setQueueCapacity(25);taskExecutor.initialize();return taskExecutor;}Overridepublic AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {return null;}}任务执行类?????Service namecodepackage com.zgw.taskexecutor;import org.springframework.scheduling.annotation.Async;import org.springframework.stereotype.Service;Servicepublic class AsyncTaskService {Async //声明是一个异步方法public void executeAsyncTaskOne(int i){System.out.println(执行异步任务: i);}Asyncpublic void executeAsyncTaskTwo(int i){System.out.println(执行异步任务加1操作:(i1));}}??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的BeanAsyncTaskService asyncTaskService context.getBean(AsyncTaskService.class);for(int i 0 ;i20;i){asyncTaskService.executeAsyncTaskOne(i);asyncTaskService.executeAsyncTaskTwo(i);;}context.close();}}?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的BeanAsyncTaskService asyncTaskService context.getBean(AsyncTaskService.class);for(int i 0 ;i20;i){asyncTaskService.executeAsyncTaskOne(i);asyncTaskService.executeAsyncTaskTwo(i);;}context.close();}}?? 运行结果如下???结果是并发执行而不是顺序执行的。?????spring_thread.rar (10.1 KB)下载次数: 0