Java异步执行
package com.swns.core.common;
import java.util.concurrent.*;
/**
* 工具类
*/
public class AsyncWorker {
private AsyncWorker() {
}
//30s开启时间
private static final int KEEP_ALIVE_TIME = 30;
private static final ThreadPoolExecutor worker = new ThreadPoolExecutor(0, Integer.MAX_VALUE, KEEP_ALIVE_TIME,
TimeUnit.SECONDS, new SynchronousQueue<Runnable>(), new RejectedExecutionHandler() {
@Override
public void rejectedExecution(Runnable r, ThreadPoolExecutor e) {
throw new RejectedExecutionException(String.format(
"Thread pool is EXHAUSTED! Thread Name: %s, Pool Size: %d (active: %d, core: %d, max: %d, largest: %d), " +
"Queue: %d, Task: %d (completed: %d), Executor status:(isShutdown:%s, isTerminated:%s, isTerminating:%s)",
Thread.currentThread().getName(), e.getPoolSize(), e.getActiveCount(), e.getCorePoolSize(),
e.getMaximumPoolSize(), e.getLargestPoolSize(), e.getQueue().size(), e.getTaskCount(), e.getCompletedTaskCount(),
e.isShutdown(), e.isTerminated(), e.isTerminating()));
}
});
public static void execute(final Runnable runnable) {
worker.execute(runnable);
}
public static void shutdown() {
worker.shutdown();
}
}
demo:如何调用
/**
* 某service接口
*/
@Override
public void save(Member member) {
memberDao.save(member);
//保存完数据库后,走异步处理
AsyncWorker.execute(() -> {
try {
//这块进行业务处理
} catch (Exception e) {
log.info("异步处理报错啦 {} ", e);
}
});
}