• java 中的异步回调


    异步回调,本来在c#中是一件极为简单和优雅的事情,想不到在java的世界里,却如此烦琐,先看下类图:

    先定义了一个CallBackTask,做为外层的面子工程,其主要工作为start 开始一个异步操作,然而真正干活的是CallBackBody,它里面的execute才是真正要处理的事情,如果成功,则触发onSucess,否则触发onFailure。

    CallBackApp做为最终的运行舞台,这里面还得单独跑一个线程,来启动CallBackTask,这样才不会阻塞后面的处理。

    CallBackBody:

    package com.cnblogs.yjmyzz.test.callback;
    
    
    public abstract class CallBackBody {
    
        void onSuccess(Object context) {
            System.out.println("onSuccess");
        }
    
        void onFailure(Object context) {
            System.out.println("onFailure");
        }
    
        abstract void execute(Object context) throws Exception;
    }
    

    CallBackTask:

    package com.cnblogs.yjmyzz.test.callback;
    
    public class CallBackTask {
        private CallBackBody body;
    
        public CallBackTask(CallBackBody body) {
            this.body = body;
        }
    
        protected void start(final Object context) {
            final Thread t = new Thread(new Runnable() {
                public void run() {
                    try {
                        body.execute(context);
                    } catch (Exception e) {
                        e.printStackTrace();
                        body.onFailure(context);
                    }
                    body.onSuccess(context);
                }
            });
            t.start();
        }
    }
    

    最后测试一把:

    CallBackApp:

    package com.cnblogs.yjmyzz.test.callback;
    
    
    /**
     * Created by jimmy on 8/13/15.
     */
    public class CallBackApp {
    
        public static void main(String[] args) {
    
            System.out.println("准备开始执行异步任务...");
    
            final Object context = "上下文信息";
    
            new CallBackTask(new CallBackBody() {
                @Override
                void execute(Object context) throws Exception {
                    System.out.println("
    正在执行耗时操作...");
                    System.out.println(context);
                    Thread.sleep(5000);
                    System.out.println("
    执行完成!");
                }
    
                void onSuccess(Object context) {
                    System.out.println("
    成功后的回调函数...");
                    System.out.println(context);
                }
    
                void onFailure(Object context) {
                    System.out.println("
    失败后的回调函数...");
                    System.out.println(context);
                }
            }).start(context);
    
            System.out.println("
    异步任务已经开始,请等待完成...");
        }
    }
    

    运行结果:

    准备开始执行异步任务...

    正在执行耗时操作...
    上下文信息

    异步任务已经开始,请等待完成...
    执行完成!

    成功后的回调函数...
    上下文信息

  • 相关阅读:
    MySQL创建临时表
    mysql存储过程之事务篇
    sqlserver 和MySQL的一些函数的区别
    JBoss7 如何用脚本 启动 和 停止
    Mysql [Err] 1118
    Mysql [Err] 1118
    Javascript两个感叹号的用法(!!)
    Mac上PyCharm运行多进程报错的解决方案
    Mac iTerm2使用lrzsz上传和下载文件
    Linux使用socks代理
  • 原文地址:https://www.cnblogs.com/yjmyzz/p/4728770.html
Copyright © 2020-2023  润新知