日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java 回调 (Callback) 接口学习使用

發布時間:2024/8/23 java 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java 回调 (Callback) 接口学习使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • Java 回調 (Callback) 接口學習使用
    • 1.什么是回調(Callback)?
    • 2.Java代碼示例
    • 2.直接調用
    • 3.接口調用
    • 4.Lambda表達式

推薦看我的InfoQ地址,界面排版更簡潔

Java 回調 (Callback) 接口學習使用

1.什么是回調(Callback)?

回調函數,簡稱回調,是指通過函數參數傳遞到其他代碼的某一塊可執行代碼的引用,這一設計允許了底層代碼調用在高層定義的子程序。

簡單來說:A調用了B的b()方法,那b方法如果包含對A中實現的邏輯的調用,這個過程就被稱作回調。

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("消息發送成功");}@Overridepublic void fail() {System.out.println("消息發送失敗");}});} }

2.直接調用

將參數改成Callback示例

package callback;public class DirectCallback {class Request{public void send(InvokeCallback.CallBack callBack) throws Exception {// 模擬等待響應Thread.sleep(3000);System.out.println("[Request]:收到響應");callBack.processResponse();}}public static void main(String[] args) throws InterruptedException {DirectCallback directCallback = new DirectCallback();final Request request = directCallback.new Request();System.out.println("發送請求");new Thread(new Runnable() {@Overridepublic void run() {try {request.send(new InvokeCallback.CallBack());} catch (Exception e) {e.printStackTrace();}}}).start();System.out.println("請求已經發送");Thread.sleep(10 * 1000);}}

3.接口調用

Callback作為接口傳入參數

Java代碼示例中就是接口調用方式!!!

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("發送請求");new Thread(new Runnable() {@Overridepublic void run() {try {request.send(new ResponseCallback() {@Overridepublic void processResponse() {System.out.println("收到響應");}});} catch (Exception e) {e.printStackTrace();}}}).start();System.out.println("請求已發送");Thread.sleep(10000);}}

4.Lambda表達式

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("發送請求");new Thread(() -> {try {request.send(() -> System.out.println("處理響應"));} catch (Exception e) {e.printStackTrace();}} ).start();System.out.println("請求已發送");}}

參考博客:

https://juejin.im/post/6844904066129084429

http://gaocegege.com/Blog/java/java-callback

總結

以上是生活随笔為你收集整理的Java 回调 (Callback) 接口学习使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。