91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java中怎么使用同步回調和異步回調

發布時間:2023-04-18 16:14:52 來源:億速云 閱讀:102 作者:iii 欄目:開發技術

本篇內容主要講解“Java中怎么使用同步回調和異步回調”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Java中怎么使用同步回調和異步回調”吧!

(一)同步回調

同步回調函數將始終在執行某些操作后立即執行。這意味著它將與執行該操作的函數同步。
在觀察者設計模式中可以找到回調函數的示例。在需要單擊按鈕以啟動某些操作的應用界面中,我們可以將回調函數作為該按鈕單擊的監聽器傳遞。監聽器函數等待按鈕被單擊,然后執行監聽器回調。

(1)匿名內部類回調

每當我們將帶有方法實現的接口傳遞給 Java 中的另一個方法時,我們都在使用回調函數的概念。在下面的代碼中,我們將通過 Consumer 功能接口和一個匿名內部類(沒有名稱的實現)來實現 accept() 方法。
實現 accept() 方法后,我們將執行 performAction 方法中的操作;然后我們將從 Consumer 接口執行 accept() 方法:

import java.util.function.Consumer;

/**
 * 同步場景下匿名內部類的方式實現回調
 *
 * @author zhangyu
 * @date 2023/4/16
 */
public class AnonymousClassCallback {

    public static void main(String[] args) {
        performAction(new Consumer<String>() {
            @Override
            public void accept(String s) {
                System.out.println(s);
            }
        });
    }

    public static void performAction(Consumer<String> consumer) {
        System.out.println("執行特定的業務邏輯");
        consumer.accept("回調代碼被執行");
    }
}

Java中怎么使用同步回調和異步回調

在這段代碼中,我們將 Consumer 接口傳遞給 performAction() 方法,然后在操作完成后調用 accept() 方法。

(2)Lambda 回調

觀察上面的代碼可能還會注意到使用匿名內部類非常冗長。改用 lambda 會好得多。

/**
 * 同步場景下匿名內部類的方式實現回調(Lambda寫法)
 *
 * @author zhangyu
 * @date 2023/4/16
 */
public class LambdaCallback {
    public static void main(String[] args) {
        performAction(() -> System.out.println("回調代碼被執行"));
    }

    public static void performAction(Runnable runnable) {
        System.out.println("執行特定的業務邏輯");
        runnable.run();
    }
}

輸出再次表明正在執行操作并執行回調。

(二)異步回調

通常,我們希望使用異步回調方法,這意味著將在操作之后調用但與其他線程異步調用的方法。當不需要在其他線程之后立即調用回調方法時,這可能有助于提高性能。

(1)簡單的線程回調

在下面的代碼中,首先我們將從 Runnable 功能接口實現 run() 方法。然后,我們將創建一個 Thread 并使用我們剛剛在 Thread 中實現的 run() 方法。最后,我們啟動線程異步執行:

/
/**
 * 異步回調實例
 *
 * @author zhangyu
 * @date 2023/4/16
 */
public class AsynchronousCallback {

    public static void main(String[] args) {
        Runnable runnable = () -> System.out.println("回調代碼被執行");
        AsynchronousCallback asynchronousCallback = new AsynchronousCallback();
        asynchronousCallback.performAsynchronousAction(runnable);
    }

    public void performAsynchronousAction(Runnable runnable) {
        new Thread(() -> {
            System.out.println("執行異步操作代碼");
            runnable.run();
        }).start();
    }

}

Java中怎么使用同步回調和異步回調

在上面的代碼中,首先我們為 Runnable 中的 run() 方法創建了一個實現。然后,我們調用了 performAsynchronousAction() 方法,傳遞帶有 run() 方法實現的可運行功能接口。 在 performAsynchronousAction() 中,我們傳遞 runnable 接口并使用 lambda 在 Thread 中實現另一個 Runnable 接口。

(2)異步并行回調

除了在異步操作中調用回調函數之外,我們還可以在調用另一個函數的同時調用回調函數。這意味著我們可以啟動兩個線程并并行調用這些方法。 代碼將與前面的示例類似,但請注意,我們將啟動一個新線程并在這個新線程中調用回調函數,而不是直接調用回調函數:

/**
 * 異步并行回調
 *
 * @author zhangyu
 * @date 2023/4/16
 */
public class AsynchronousParallelCallback {

    public void performAsynchronousAction(Runnable runnable) {

        new Thread(() -> {
            System.out.println("執行異步操作代碼");
            // 創建一個新的線程執行回調
            new Thread(runnable).start();
        }).start();
    }

    public static void main(String[] args) {
        Runnable runnable = () -> System.out.println("回調代碼被執行");
        AsynchronousParallelCallback callback = new AsynchronousParallelCallback();
        callback.performAsynchronousAction(runnable);
    }
}

當我們不需要在 performAsynchronousAction() 方法的操作之后立即執行回調函數時,異步并行回調很有用。 一個真實的例子是當我們在線購買產品時,我們不需要等到確認付款、檢查庫存以及所有那些繁重的流程。在這種情況下,我們可以在后臺執行回調調用的同時做其他事情。CompletableFuture 回調

(3)CompletableFuture 回調

另一種使用異步回調函數的方法是使用 CompletableFuture API。這個強大的 API 在 Java 8 中引入,有助于執行和組合異步方法調用。它完成了我們在前面的示例中所做的一切,例如創建一個新線程然后啟動和管理它。 在下面的代碼示例中,我們將創建一個新的 CompletableFuture,然后我們將調用傳遞字符串的 supplyAsync 方法。 接下來,我們將創建另一個 CompletableFuture,然后應用一個回調函數來執行我們配置的第一個函數:

import java.util.concurrent.CompletableFuture;

/**
 * CompletableFuture callback
 *
 * @author zhangyu
 * @date 2023/4/16
 */
public class CompletableFutureCallback {
    public static void main(String[] args) throws Exception {
        CompletableFuture<String> completableFuture
                = CompletableFuture.supplyAsync(() -> {
            System.out.println("執行業務代碼");
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
            System.out.println("執行業務代碼結束");
            return "ok";
        });

        CompletableFuture<String> execution = completableFuture
                .thenApply(s -> s + "回調被執行");
        System.out.println("main線程執行代碼");
        System.out.println(execution.get());
    }
}

Java中怎么使用同步回調和異步回調

注意在上面的代碼示例中,CompletableFuture開啟了一個新的線程,因此其對應的代碼是在新的線程中執行的,因為代碼中Thread.sleep(2000);所以main線程執行代碼內容先打印了出來。再者可以看到在CompletableFuture執行代碼和后面的回調代碼是按照順序執行的。

到此,相信大家對“Java中怎么使用同步回調和異步回調”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阳江市| 紫云| 荣昌县| 抚远县| 兴海县| 济源市| 锦屏县| 宣威市| 玛纳斯县| 辽宁省| 米脂县| 新密市| 东源县| 南京市| 海丰县| 英超| 瑞丽市| 定兴县| 南城县| 南阳市| 渝北区| 泾源县| 台北县| 镇康县| 横山县| 南木林县| 温泉县| 拉萨市| 即墨市| 高平市| 西乌珠穆沁旗| 辛集市| 子长县| 昌邑市| 威海市| 双辽市| 定边县| 峡江县| 炉霍县| 汪清县| 上高县|