背景
原因
传统的同步执行
使用了异步任务
若依的异步任务管理器
若依的异步任务 统一使用
异步任务管理器
进行管理
这段代码使用了链式编程来记录登录失败的信息。链式编程是一种编程风格,通过在一个语句中连续调用多个方法来简化代码。以下是对这段代码的详细解释:
AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, e.getMessage()));
AsyncManager.me()
: 这是一个静态方法调用,返回AsyncManager
的单例实例。AsyncManager
是一个管理异步任务的类。
.execute(...)
: 调用AsyncManager
实例的execute
方法来执行一个异步任务。这个方法接受一个Runnable
对象作为参数。
AsyncFactory.recordLogininfor(...)
: 这是一个静态方法调用,返回一个Runnable
对象。AsyncFactory
是一个工厂类,用于创建各种异步任务。recordLogininfor
方法创建一个记录登录信息的任务。
username
: 用户名,作为记录登录信息的参数。
Constants.LOGIN_FAIL
: 一个常量,表示登录失败的状态。
e.getMessage()
: 获取异常的消息,作为记录登录信息的参数。
总结:这段代码通过调用
AsyncManager
的execute
方法,执行了一个由AsyncFactory
创建的记录登录失败信息的异步任务。这个任务记录了用户名、登录失败状态和异常消息。
异步任务管理器
常见的饿汉式
构造函数私有化
,防止有人创建新的实例对象- 生成一个单例,但是私有化,
无法直接访问单例对象
暴露
一个方法,供外部使用这个单例
/**
* 单例模式
*/
private AsyncManager(){
}
private static AsyncManager me = new AsyncManager();
public static AsyncManager me()
{
return me;
}
对外提供了两个方法
- execute 执行定时任务(经常使用)
- shutdown 停止任务线程池(不建议使用)
/**
* 执行任务
*
* @param task 任务
*/
public void execute(TimerTask task)
{
// 异步任务在10毫秒后执行
executor.schedule(task, OPERATE_DELAY_TIME, TimeUnit.MILLISECONDS);
}
/**
* 停止任务线程池
*/
public void shutdown()
{
// 关闭线程池 但是不会立即关闭,而是等到线程任务都执行完了才关闭
// 常规情况下,不建议关闭线程池,因为线程池是共享资源,通常情况下会被多个模块共享
Threads.shutdownAndAwaitTermination(executor);
}
线程池的配置对象
异步任务的线程池的使用的 IOC中提前配置的线程池对象
线程池对象
/**
* 执行周期性或定时任务
*/
@Bean(name = "scheduledExecutorService")
protected ScheduledExecutorService scheduledExecutorService()
{
// 创建一个定时任务线程池
return new ScheduledThreadPoolExecutor(corePoolSize,
// 设置线程工厂,命名模式为 "schedule-pool-%d",并将线程设置为守护线程
new BasicThreadFactory.Builder().namingPattern("schedule-pool-%d")