Java 回调 (Callback) 接口学习使用
生活随笔
收集整理的這篇文章主要介紹了
Java 回调 (Callback) 接口学习使用
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
文章目錄
- Java 回調(diào) (Callback) 接口學(xué)習(xí)使用
- 1.什么是回調(diào)(Callback)?
- 2.Java代碼示例
- 2.直接調(diào)用
- 3.接口調(diào)用
- 4.Lambda表達(dá)式
推薦看我的InfoQ地址,界面排版更簡(jiǎn)潔
Java 回調(diào) (Callback) 接口學(xué)習(xí)使用
1.什么是回調(diào)(Callback)?
回調(diào)函數(shù),簡(jiǎn)稱回調(diào),是指通過(guò)函數(shù)參數(shù)傳遞到其他代碼的某一塊可執(zhí)行代碼的引用,這一設(shè)計(jì)允許了底層代碼調(diào)用在高層定義的子程序。
簡(jiǎn)單來(lái)說(shuō):A調(diào)用了B的b()方法,那b方法如果包含對(duì)A中實(shí)現(xiàn)的邏輯的調(diào)用,這個(gè)過(guò)程就被稱作回調(diào)。
2.Java代碼示例
package callback;public class MQ {class Producer{public void send(String msg, MsgStateCallback msgStateCallback) {System.out.println("send msg :" + msg);int ACK = 1;if (ACK == 0){msgStateCallback.succ();}else {msgStateCallback.fail();}}}interface MsgStateCallback{void succ();void fail();}public static void main(String[] args) {MQ mq = new MQ();Producer producer = mq.new Producer();String msg = "my msg";producer.send(msg, new MsgStateCallback() {@Overridepublic void succ() {System.out.println("消息發(fā)送成功");}@Overridepublic void fail() {System.out.println("消息發(fā)送失敗");}});} }2.直接調(diào)用
將參數(shù)改成Callback示例
package callback;public class DirectCallback {class Request{public void send(InvokeCallback.CallBack callBack) throws Exception {// 模擬等待響應(yīng)Thread.sleep(3000);System.out.println("[Request]:收到響應(yīng)");callBack.processResponse();}}public static void main(String[] args) throws InterruptedException {DirectCallback directCallback = new DirectCallback();final Request request = directCallback.new Request();System.out.println("發(fā)送請(qǐng)求");new Thread(new Runnable() {@Overridepublic void run() {try {request.send(new InvokeCallback.CallBack());} catch (Exception e) {e.printStackTrace();}}}).start();System.out.println("請(qǐng)求已經(jīng)發(fā)送");Thread.sleep(10 * 1000);}}3.接口調(diào)用
Callback作為接口傳入?yún)?shù)
Java代碼示例中就是接口調(diào)用方式!!!
package callback;import java.lang.reflect.Method;public class InterfaceCallback {class Request{public void send(ResponseCallback responseCallback) throws Exception {Thread.sleep(3000);responseCallback.processResponse();}}interface ResponseCallback{void processResponse();}public static void main(String[] args) throws InterruptedException {InterfaceCallback interfaceCallback = new InterfaceCallback();final Request request = interfaceCallback.new Request();System.out.println("發(fā)送請(qǐng)求");new Thread(new Runnable() {@Overridepublic void run() {try {request.send(new ResponseCallback() {@Overridepublic void processResponse() {System.out.println("收到響應(yīng)");}});} catch (Exception e) {e.printStackTrace();}}}).start();System.out.println("請(qǐng)求已發(fā)送");Thread.sleep(10000);}}4.Lambda表達(dá)式
package callback;import java.lang.reflect.Method;public class LambdaCallback {class Request{public void send(ResponseCallback responseCallback) throws Exception {Thread.sleep(3000);responseCallback.processResponse();}}interface ResponseCallback{void processResponse();}public static void main(String[] args) throws Exception {LambdaCallback lambdaCallback = new LambdaCallback();Request request = lambdaCallback.new Request();System.out.println("發(fā)送請(qǐng)求");new Thread(() -> {try {request.send(() -> System.out.println("處理響應(yīng)"));} catch (Exception e) {e.printStackTrace();}} ).start();System.out.println("請(qǐng)求已發(fā)送");}}參考博客:
https://juejin.im/post/6844904066129084429
http://gaocegege.com/Blog/java/java-callback
總結(jié)
以上是生活随笔為你收集整理的Java 回调 (Callback) 接口学习使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 维度建模工具
- 下一篇: IO之随机访问文件(RandomAcce