异步管理类
采用单例模式的静态饥饿加载,利用空间换时间,提高效率
使用异步延迟任务线程池
通过其内直接创建饥一个static对象,形成饥饿加载,以达到记录日志时的单例模式
import java.util.TimerTask;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import com.common.utils.Threads;
/**
* 异步任务管理器
*
*
*/
public class AsyncManager{
/**
* 操作延迟10毫秒
*/
private final int OPERATE_DELAY_TIME = 10;
/**
* 异步操作任务调度线程池
*/
private ScheduledExecutorService executor =Executors.newScheduledThreadPool(5);
/**
* 单例模式
*/
private AsyncManager(){
}
private static AsyncManager me = new AsyncManager();
public static AsyncManager me(){
return me;
}
/**
* 执行任务
*
* @param task 任务
*/
public void execute(TimerTask task){
executor.schedule(task, OPERATE_DELAY_TIME, TimeUnit.MILLISECONDS);
}
/**
* 停止任务线程池
*/
public void shutdown(){
Threads.shutdownAndAwaitTermination(executor);
}
}
异步工厂类
调用静态方法传入具体参数,拼接字符串写入Log,具体参数写入数据库
通过匿名内部类重写TimerTask的run()方法,实现子线程进行的Log日志打印及数据库日志记录任务
返回一个任务。
import java.util.TimerTask;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.common.constant.Constants;
import com.common.utils.LogUtils;
import com.common.utils.ServletUtils;
import com.common.utils.ip.AddressUtils;
import com.common.utils.ip.IpUtils;
import com.common.utils.spring.SpringUtils;
import com.clues.domain.SysLogininfor;
import com.clues.domain.SysOperLog;
import com.clues.service.