脚本宝典收集整理的这篇文章主要介绍了java实现异步任务 AsyncManager AsyncFactory,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
当我们需要多线程执行耗时的任务,比如发送邮件时,就可以设置异步任务
直接把下面的代码复制到项目中
import com.javasm.COMmon.util.SPRingContainerUtils;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
public class AsyncManager {
//声明带线程池的执行器
private static ThreadPoolTaskExecutor threadPoolTaskExecutor;
//声明一个自定义类 这个类用来管理定时任务的调度器
private static AsyncManager asyncManager;
//单例 构造函数私有化
private AsyncManager(){
//使用自定义的工具类从spring容器中获取对象
threadPoolTaskExecutor = SpringContainerUtils.getBean(ThreadPoolTaskExecutor.class);
//获取核心线程池
System.out.println(threadPoolTaskExecutor.getCorePoolSize());
}
//单例模式 对外公开的方法 用于获取对象
public static AsyncManager getInstance(){
if (asyncManager==null){
asyncManager=new AsyncManager();
}
return asyncManager;
}
//传入Runnable类对象 执行器就会执行这个对象的指定的任务 比如把下面的AsynCFactory类的方法作为参数传入
public void executor(Runnable runnable){
threadPoolTaskExecutor.execute(runnable);
}
//停止线程运行
public void shutDown() {
threadPoolTaskExecutor.shutdown();
}
}
执行器中构造的ThreadPoolTaskExecutor类自带线程池,而具体的线程池数可以在springboot项目的yML配置文件中设置
task:
execution:
pool:
core-Size: 50
有了异步任务的执行器,也设置了线程池大小,接下来就要给出具体要执行的任务,这些任务全部写在一个单独的类中
在这个类中的方法执行时都是多线程的
import com.javasm.common.util.SpringContainerUtils;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
public class AsyncFactory {
/**
*多线程发送邮件
*/
//这个类中每个异步任务单独写一个返回类型为Runnable的方法
public static Runnable sendEmail(String email,String content){
//其他地方是固定写法 在这个代码块中 写要执行的任务
Runnable runnable=()->{
//创建一个SimpleMailMessage 用于发送邮件
SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
//设置具体属性
simpleMailMessage.setFrom("邮箱地址");
simpleMailMessage.setTo(email);
simpleMailMessage.setSubject("定时发送");
simpleMailMessage.setText(content);
//使用自定义的工具类 从spring容器中取出JavaMailSender对象
JavaMailSender bean = SpringContainerUtils.getBean(JavaMailSender.class);
//使用JavaMailSender对象的方法,发送右键
bean.send(simpleMailMessage);
};
return runnable;
}
//可以继续写其他要异步执行的任务
}
以上是脚本宝典为你收集整理的java实现异步任务 AsyncManager AsyncFactory全部内容,希望文章能够帮你解决java实现异步任务 AsyncManager AsyncFactory所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。