Java异步回调

同步回调:单线程中调用一个方法在得到返回值时一直阻塞

异步回调:多线程中1号线程调用A方法时多开2号线程,并把想要回调的方法B给A方法,之后不管A方法如何,1号线程继续执行(因为多开了2号线程),而被调用的1号线程的B方法就是被回调的函数

代码实例

Main.java

public class Main {
    public static void main(String[] args) {
        System.out.println("丁真发个消息给雪豹!\n");

        Server server = new Server();
        server.Solve(new Server.Callback() {
            @Override
            public void call(String msg) {
                System.out.println("动物朋友们你好"+msg);
            }
        },"窝是丁真\n");//实现Server的接口并传给Server,下面的一样

        System.out.println("丁真在思考!\n");

        server.Solve(new Server.Callback() {
            @Override
            public void call(String msg) {
                System.out.println("雪豹闭嘴"+msg);
            }
        },"别坏了我的好事\n");

        System.out.println("丁真在思考!\n");
    }

}

Server.java

import static java.lang.Thread.sleep;

public class Server {
    public static interface Callback{
        public void call(String msg);
    }

    public void Solve(Callback callback,String msg){
        System.out.println("开始处理丁真的消息");
        new Thread(()->{
            try
            {
                sleep(3000);
                callback.call(msg);
            }catch (InterruptedException e){
                e.printStackTrace();
            }
        }).start();

    }

}

实现方式:

1.Server需要有一个接口Callback来接受别的线程实现的函数

2.在实际调用的Solve中多开线程并调用接口函数

3.Main中实现接口函数并传给Server

运行结果:

丁真发个消息给雪豹!

开始处理丁真的消息
丁真在思考!

开始处理丁真的消息
丁真在思考!

雪豹闭嘴别坏了我的好事

动物朋友们你好窝是丁真

猜你喜欢

转载自blog.csdn.net/qq_30798083/article/details/131788787
今日推荐