1、使用juc报下的CompletableFuture工具类
//没有返回值
CompletableFuture.runAsync(() -> {
//dosth
});
//带有返回值
CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
//dosth
return null;
});
try {
String resultStr = future.get();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
CompletableFuture的具体使用还有多种方式,具体自查。
2、延迟执行工具类
public class ScheduledPoolTaskUtils {
// 线程池核心线程数
public static int CORE_POOL_SIZE = 10;
private static ScheduledExecutorService threadPool;
static {
RejectedExecutionHandler rejectedExecutionHandler = new ThreadPoolExecutor.AbortPolicy();
threadPool = new ScheduledThreadPoolExecutor(CORE_POOL_SIZE, rejectedExecutionHandler);
}
/**
* 创建并执行在给定延迟后启用的 一次性操作
* 参数:callable - 要执行的功能;delay - 从现在开始延迟执行的时间;unit - 延迟参数的时间单位
* @param callable
* @param delay
* @param timeUnit
* @return
*/
public static ScheduledFuture<Object> submitFuture(Callable<Object> callable, long delay, TimeUnit timeUnit) {
return threadPool.schedule(callable, delay, timeUnit);
}
}
使用示例:
ScheduledPoolTaskUtils.submitFuture(() -> {
//dosth
},1L, TimeUnit.SECONDS);