全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

详解spring多线程与定时任务

本篇主要描述一下spring的多线程的使用与定时任务的使用.

1.spring多线程任务的使用

spring通过任务执行器TaskExecutor来实现多线程与并发编程。通常使用ThreadPoolTaskExecutor来实现一个基于线程池的TaskExecutor.

首先你要实现AsyncConfigurer 这个接口,目的是开启一个线程池

代码如下:

package com.foreveross.service.weixin.test.thread;

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;

/**
 * 注入一个线程池
 * @author mingge
 *
 */

@Configuration
@ComponentScan("com.foreveross.service.weixin.test.thread")
@EnableAsync
public class TaskExecutorConfig implements AsyncConfigurer {

  @Override
  public Executor getAsyncExecutor() {
    ThreadPoolTaskExecutor taskExecutor=new ThreadPoolTaskExecutor();
    taskExecutor.setCorePoolSize(5);
    taskExecutor.setMaxPoolSize(20);
    taskExecutor.setQueueCapacity(25);
    taskExecutor.initialize();
    return taskExecutor;
  }

  @Override
  public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
    return null;
  }

  
}

然后注入一个类,实现你的业务,并在你的Bean的方法中使用@Async注解来声明其是一个异步任务

代码如下:

package com.foreveross.service.weixin.test.thread;

import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;

/**
 * 线程池任务
 * @author mingge
 *
 */
@Service
public class TaskService {

  @Async
  public void executeAsyncTask(int i){
    System.out.println("执行异步任务:"+i);
  }
  
  @Async
  public void executeAsyncTask1(int i){
    System.out.println("执行异步任务1:"+(i+i));
  }
}

最后通过测试,可以看到你的实现是异步执行了.

package com.foreveross.service.weixin.test.thread;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;


/**
 * 
 * @author mingge
 *
 */
public class Test {

  public static void main(String[] args) {
    AnnotationConfigApplicationContext context=new AnnotationConfigApplicationContext(TaskExecutorConfig.class);
    TaskService taskService=context.getBean(TaskService.class);
    for(int i=0;i<20;i++){
      taskService.executeAsyncTask(i);
      taskService.executeAsyncTask1(i);
    }
    //最后可以根据结果可以看出结果是并发执行而不是顺序执行的呢
    context.close();
  }
}

2.spring定时任务的使用

在java原生态中,我们使用timer就可以了,这里小编说一些在Spring中的定时任务的使用

package com.foreveross.service.weixin.test.thread;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;

@Configuration
@ComponentScan("com.foreveross.service.weixin.test.thread")
@EnableScheduling//开启对定时器的支持
public class TaskSchedulerConfig {

}
package com.foreveross.service.weixin.test.thread;

import java.util.Date;

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;

@Service
public class TimerTaskJob {

  @Scheduled(fixedRate=2000)
  public void test(){
    System.out.println("我是定时任务:"+new Date().getSeconds());
  }
}
package com.foreveross.service.weixin.test.thread;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class TestTimer {
  public static void main(String[] args) {
    AnnotationConfigApplicationContext context=new AnnotationConfigApplicationContext(TaskSchedulerConfig.class);
    
    //context.close();
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# spring  # 定时器  # 多线程  # 多线程任务  # spring定时任务多线程  # 浅谈Spring学习之request  # session与globalSession作用域  # 基于Spring中的线程池和定时任务功能解析  # Spring中如何获取request的方法汇总及其线程安全性分析  # 来实现  # 是一个  # 我是  # 你要  # 并在  # 可以看到  # 可以看出  # 可以根据  # 小编  # 大家多多  # 就可以  # 而不是  # 原生态  # 执行器  # 结果是  # 目的是  # springframework  # TaskExecutorConfig  # interceptor 


相关文章: 如何通过WDCP绑定主域名及创建子域名站点?  如何撰写建站申请书?关键要点有哪些?  魔毅自助建站系统:模板定制与SEO优化一键生成指南  如何挑选优质建站一级代理提升网站排名?  定制建站是什么?如何实现个性化需求?  国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?  如何在腾讯云服务器快速搭建个人网站?  高防服务器租用如何选择配置与防御等级?  深圳防火门网站制作公司,深圳中天明防火门怎么编码?  焦点电影公司作品,电影焦点结局是什么?  手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?  如何在阿里云域名上完成建站全流程?  网站制作公司排行榜,四大门户网站排名?  Python路径拼接规范_跨平台处理说明【指导】  成都品牌网站制作公司,成都营业执照年报网上怎么办理?  想学网站制作怎么学,建立一个网站要花费多少?  Android使用GridView实现日历的简单功能  建站主机服务器选型指南与性能优化方案解析  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  建站主机服务器选购指南:轻量应用与VPS配置解析  如何在Windows服务器上快速搭建网站?  如何选择美橙互联多站合一建站方案?  c++如何打印函数堆栈信息_c++ backtrace函数与符号名解析【方法】  如何构建满足综合性能需求的优质建站方案?  潍坊网站制作公司有哪些,潍坊哪家招聘网站好?  网站制作与设计教程,如何制作一个企业网站,建设网站的基本步骤有哪些?  最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?  如何规划企业建站流程的关键步骤?  Thinkphp 中 distinct 的用法解析  高配服务器限时抢购:企业级配置与回收服务一站式优惠方案  建站之星logo尺寸如何设置最合适?  济南企业网站制作公司,济南社保单位网上缴费步骤?  官网网站制作腾讯审核要多久,联想路由器newifi官网  网站制作价目表怎么做,珍爱网婚介费用多少?  北京的网站制作公司有哪些,哪个视频网站最好?  Bpmn 2.0的XML文件怎么画流程图  网站制作的方法有哪些,如何将自己制作的网站发布到网上?  c# 在高并发下使用反射发射(Reflection.Emit)的性能  如何通过西部数码建站助手快速创建专业网站?  实惠建站价格推荐:2025年高性价比自助建站套餐解析  如何配置WinSCP新建站点的密钥验证步骤?  如何通过VPS建站实现广告与增值服务盈利?  如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南  如何在阿里云购买域名并搭建网站?  企业宣传片制作网站有哪些,传媒公司怎么找企业宣传片项目?  网站制作网站,深圳做网站哪家比较好?  如何在西部数码注册域名并快速搭建网站?  如何生成腾讯云建站专用兑换码?  如何快速登录WAP自助建站平台?  建站之星五站合一营销型网站搭建攻略,流量入口全覆盖优化指南 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。