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

不言
不言 转载
2019-03-07 17:15:39 2187浏览

本篇文章给大家带来的内容是关于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实现异步调用的代码示例的详细内容,更多请关注php中文网其它相关文章!

声明:本文转载于:博客园,如有侵犯,请联系admin@php.cn删除