最简单的异步任务的实现和调用
2019-03-28 本文已影响0人
Yellowtail
适用场景
异步任务适合这样的场景:
比如有人回复了一个评论,那么这个接口
其实把回复内容存到数据库就可以了,
给别人发消息提醒
说有人回复了你,这种操作其实没有必要占用当前线程时间,毕竟是接口,有响应时间要求
此时,这个提醒
操作就可以进行异步处理
新建线程池
一般来说,定长线程池
比较万金油,适合大部分场景
这里我们就新建一个定长线程池,用来执行一些异步任务
public class AsyncUtils {
/**
* <br>定长线程池,目前大小为20
*/
private static final ExecutorService EXECUTOR_SERVICE = (ExecutorService) Executors.newFixedThreadPool(20);
public static void run(Runnable task){
EXECUTOR_SERVICE.execute(task);
}
线程池大小根据实际情况调整,没有什么定律
生成异步任务并让线程池执行
1. 内部匿名类
AsyncUtils.run(new Runnable() {
@Override
public void run() {
System.out.println("hello wolrd");
}
});
2. lambda
现在进入到 Java8 时代,lambda
表达式可以帮助我们很便捷的做一些事情
AsyncUtils.run( () -> System.out.println("hello wolrd"));
之所以可以这么写,是因为 Runnable
是一个 函数式接口
(大家可以简单的认为,就是只有一个方法的接口,实际上有些场景多个也可以)
lambda
可以自动为函数式接口提供 内部匿名类的实现
参考
https://www.cnblogs.com/WJ5888/p/4667086.html
https://colobu.com/2014/10/28/secrets-of-java-8-functional-interface