制作论文招聘网站的,班级优化大师app下载学生版,太原网站建设随州,学习网页制作学什么一、同步调用
同步调用是最基本的调用方式。类A的a()方法调用类B的b()方法#xff0c;类A的方法需要等到B类的方法执行完成才会继续执行。如果B的方法长时间阻塞#xff0c;就会导致A类方法无法正常执行下去。 二、异步调用
如果A调用B#xff0c;B的执行时间比较长#…一、同步调用
同步调用是最基本的调用方式。类A的a()方法调用类B的b()方法类A的方法需要等到B类的方法执行完成才会继续执行。如果B的方法长时间阻塞就会导致A类方法无法正常执行下去。 二、异步调用
如果A调用BB的执行时间比较长那么就需要考虑进行异步处理使得B的执行不影响A。通常在A中新起一个线程用来调用B然后A中的代码继续执行。
异步通常分两种情况
第一不需要调用结果直接调用即可比如发送通知;第二需要异步调用结果在Java中可使用FutureCallable实现。 三、回调 通常回调分为同步回调和异步回调。
其中同步回调与同步调用类似代码运行到某一个位置的时候如果遇到了需要回调的代码会在这里等待等待回调结果返回后再继续执行。
异步回调与异步调用类似代码执行到需要回调的代码的时候并不会停下来而是继续执行当然可能过一会回调的结果会返回回来。
1、同步回调 制作Callback接口
public interface Callback {void CallbackData(String Data);
}自定义向小明提问的人
public class CallbackHanler implements Callback{Caller caller;public CallbackHanler(Caller caller) {this.caller caller;}Overridepublic void CallbackData(String Data) {Log.d(TAG!,你懂了答案为Data);}public void ask(){caller.DoWork(this);}
}大佬小明
public class Caller {public void DoWork(Callback callback){Log.d(TAG!,小明进行自己的工作);try {Thread.sleep(5000);Log.d(TAG!,开始解决你的问题);} catch (InterruptedException e) {throw new RuntimeException(e);}Log.d(TAG!,问题答案为2);//传递问题答案callback.CallbackData(2);}
}在Main函数中调用这两个类
Caller caller new Caller();
CallbackHanler callbackHanler new CallbackHanler(caller);
callbackHanler.ask();
Log.d(TAG!,你在等待。。。。);打印结果如下 上面的实例演示了同步回调很明显在调用的过受到Caller执行时长的影响需要等到Caller处理完才能继续执行CallbackHanler方法中的后续代码。
2、异步回调
修改CallbackHanler的ask()方法如下 public void ask(){new Thread(()- caller.DoWork(this)).start();}打印结果如下 通过Main函数的Log.d(“TAG!”,“你在等待。。。。”);可以知道此时main函数没有等待ask()而是直接继续执行。