多线程异步任务

来源:互联网 发布:磁铁车牌号码贴 淘宝 编辑:程序博客网 时间:2024/06/16 20:59

Spring通过任务执行器(TaskExecutor)来实现多线程和并发。可使用ThreadPoolTaskExecutor来实现;

1.利用@EnableAsync开启异步任务支持

2.配置实现AsyncConfigurer接口的类并重写getAsyncExecutor方法得到基于线程池的TaskExecutor

@Configuration@EnableAsyncpublic class TaskConfig implements AsyncConfigurer {    @Override    public Executor getAsyncExecutor() {        ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();        taskExecutor.setCorePoolSize(5);        taskExecutor.setMaxPoolSize(10);        taskExecutor.setQueueCapacity(25);        taskExecutor.initialize();        return taskExecutor;    }    @Override    public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {        return null;    }}

任务类

@Service@Async  //可用于具体方法   类上标识此类方法全部是异步方法public class AsyncTaskService {    public void executeTask(Integer i){        System.err.println("异步任务..."+i);    }    public void executeTask2(Integer i){        System.err.println("异步任务2..."+i);    }}

执行

    AsyncTaskService service = context.getBean(AsyncTaskService.class);        for(int i=0;i<10;i++){            service.executeTask(i);            service.executeTask2(i);        }

结果

异步任务...0异步任务2...0异步任务2...2异步任务...3异步任务...2异步任务...1异步任务2...1异步任务2...5异步任务...6异步任务2...6异步任务...7异步任务2...7异步任务...8异步任务2...8异步任务...9异步任务2...9异步任务...5异步任务2...4异步任务...4异步任务2...3

并发执行而不是顺序执行

0 0