异步任务

最简单的异步任务的实现和调用

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

上一篇 下一篇

猜你喜欢

热点阅读