标王 热搜:
 
当前位置: 首页 » 编程语言 » Java » 正文

Java实现异步调用的代码示例

放大字体  缩小字体 发布日期:2019-04-27  来源:Yp0k1H  作者:xinb2b.cn  浏览次数:113
核心提示:本篇文章给大家带来的内容是关于Java实现异步调用的代码示例,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。


本篇文章给大家带来的内容是关于Java实现异步调用的代码示例,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

首先 我遇到的问题是 接口调用时需要更新缓存 而更新缓存又是个说快不快的过程 所以打算做异步调用 返回我所需要的结果即可 ,至于缓存什么时候更新完 就不是我所需要关注的了

废话不多说 上代码

public class MyExecutor {
    private ExecutorService executor = Executors.newCachedThreadPool() ;
    public void fun() throws Exception {
        executor.submit(new Runnable(){
            @override
                public void run() {
                    try {
                        //要执行的业务代码,我们这里没有写方法,可以让线程休息几秒进行测试
                        Thread.sleep(10000);
                        System.out.print("睡够啦~");
                    }catch(Exception e) {
                        throw new RuntimeException("报错啦!!");
                    }
                }
        });
    }
}
public class Demo{
    
    public static void main(String[] args) {
        
         MyExecutor  myExecutor = new MyExecutor();
         try {
            myExecutor.fun();
            System.our.print("你先睡着,我先回家啦~");
        }catch(Exception e) {
             throw new RuntimeException("业务程序报错啦!!");
        }
    }
}

好啦 代码到此结束 (ps:纯手打 若有错 请见谅)

运行主方法

会先打印(你先睡着,我先回家啦~)

然后(睡够啦~)

也就是说 在需要异步执行的方法未执行完毕时 主程序已经返回结果了 不需要继续等待 这样可以保证程序先返回结果 再继续执行不需要等待的繁琐的任务 当然也可以加一些方法去判断异步方法是否执行完毕。

说一下Executors类

这个类是用来创建线程池的

有这么几个方法

1、newFixedThreadPool() 创建固定大小的线程池 线程池的大小一旦达到最大值就会保持不变,如果某个线程因为执行异常而结束,那么线程池会补充一个新线程

2、newCachedThreadPool() 创建一个可缓存的线程池,如果线程池的大小超过了处理任务所需要的线程,那么就会回收部分空闲(60s不执行任务)的线程,当任务数量增加时,此线程池又可以智能的添加新线程来处理任务。此线程池不会对线程池大小做限制,线程池大小完全依赖于系统(JVM)能够创建的最大线程大小

3、newSingleThreadExecutor() 创建一个单线程的线程池。这个线程池只有线程在工作,也就是相当于单线程串行执行所有任务。如果这个唯一的线程因为异常结束,那么会有一个新的线程来替代它。此线程池保证所有任务的执行顺序按照任务的提交顺序执行

4、newScheduledThreadPool() 创建一个大小无限的线程池,此线程池支持定时以及周期性执行任务的需求

5、newSingleThreadScheduledExecutor() 创建一个单线程的线程池。此线程池支持定时以及周期性执行任务的需求

以上就是Java实现异步调用的代码示例的详细内容,更多请关注其它相关文章!

Yp0k1H
 
关键词: 示例
 
[ 编程语言搜索 ]  [ 加入收藏 ]  [ 告诉好友 ]  [ 打印本文 ]  [ 违规举报 ]  [ 关闭窗口 ]
 
推荐图文
Java数组如何反转? Java基础:封装、方法重载、构造方法(构造函数)的介绍
Java web用的比较多的框架是什么? CommandLineRunner与ApplicationRunner的介绍
推荐编程语言
点击排行
 
网站首页 | 关于我们 | 联系方式 | 使用协议 | 版权隐私 | 网站地图 | 排名推广 | 广告服务 | 积分换礼 | 网站留言 | RSS订阅