Rumah >Java >javaTutorial >Senario biasa: Fahami cara menggunakan fungsi panggil balik dalam Java

Senario biasa: Fahami cara menggunakan fungsi panggil balik dalam Java

WBOY
WBOYasal
2024-02-01 09:21:061291semak imbas

Senario biasa: Fahami cara menggunakan fungsi panggil balik dalam Java

Senario penggunaan biasa fungsi panggil balik Java

Fungsi panggil balik ialah corak reka bentuk biasa dalam pengaturcaraan berfungsi, yang membolehkan fungsi dihantar sebagai parameter kepada fungsi lain dan dipanggil dalam keadaan tertentu. Fungsi panggil balik digunakan secara meluas dalam pelbagai senario di Java, termasuk:

  • Pemprosesan acara: Fungsi panggil balik biasanya digunakan untuk mengendalikan pelbagai acara, seperti klik butang, pergerakan tetikus, input papan kekunci, dsb. Apabila peristiwa berlaku, fungsi panggil balik yang sepadan akan dipanggil untuk melaksanakan operasi yang sepadan.
  • Asynchronous Programming: Fungsi panggil balik juga biasa digunakan dalam pengaturcaraan tak segerak, iaitu, apabila operasi mengambil masa yang lama untuk diselesaikan, anda boleh menghantar fungsi panggil balik sebagai parameter kepada operasi dan memanggil fungsi panggil balik selepas operasi selesai, dengan itu mengelakkan Sekat utas utama.
  • Pengaturcaraan berbilang benang: Dalam pengaturcaraan berbilang benang, fungsi panggil balik boleh digunakan untuk menyelaraskan komunikasi dan penyegerakan antara utas yang berbeza. Apabila utas perlu menunggu urutan lain untuk menyelesaikan tugas tertentu, ia boleh menghantar fungsi panggil balik sebagai parameter kepada utas dan memanggil fungsi panggil balik selepas tugas selesai, dengan itu mencapai komunikasi dan penyegerakan antara utas.

Contoh Kod

Berikut ialah beberapa contoh kod untuk fungsi panggil balik Java:

  • Pengendalian Acara:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class ButtonExample {

    public static void main(String[] args) {
        // 创建一个按钮
        JButton button = new JButton("Click me!");

        // 添加一个点击事件监听器
        button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // 当按钮被点击时,执行此代码
                System.out.println("Button clicked!");
            }
        });

        // 显示按钮
        JFrame frame = new JFrame();
        frame.add(button);
        frame.setSize(300, 300);
        frame.setVisible(true);
    }
}

Dalam contoh ini, apabila butang diklik, actionPercode) kaedah akan dipanggil, dengan itu mengeluarkan "Butang diklik!". <code>actionPerformed()方法会被调用,从而输出"Button clicked!"。

  • 异步编程
import java.util.concurrent.CompletableFuture;

public class AsyncExample {

    public static void main(String[] args) {
        // 创建一个CompletableFuture对象
        CompletableFuture<Integer> future = new CompletableFuture<>();

        // 创建一个新线程来执行任务
        new Thread(() -> {
            // 执行任务
            int result = calculateSomething();

            // 将结果设置到CompletableFuture对象中
            future.complete(result);
        }).start();

        // 注册一个回调函数,当CompletableFuture对象完成时执行
        future.thenAccept(result -> {
            // 当任务完成时,执行此代码
            System.out.println("Result: " + result);
        });
    }

    private static int calculateSomething() {
        // 模拟一个耗时操作
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        // 返回结果
        return 42;
    }
}

在这个示例中,calculateSomething()方法模拟了一个耗时操作,thenAccept()方法则是一个回调函数,当calculateSomething()方法执行完成后,thenAccept()方法会被调用,从而输出"Result: 42"。

  • 多线程编程
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class ThreadExample {

    public static void main(String[] args) {
        // 创建一个线程池
        ExecutorService executorService = Executors.newFixedThreadPool(2);

        // 创建一个任务
        Runnable task = () -> {
            // 执行任务
            System.out.println("Task executed by thread: " + Thread.currentThread().getName());
        };

        // 将任务提交给线程池
        executorService.submit(task);

        // 注册一个回调函数,当所有任务都完成后执行
        executorService.shutdown();
        executorService.awaitTermination(1, TimeUnit.MINUTES);

        System.out.println("All tasks completed.");
    }
}

在这个示例中,submit()方法将任务提交给线程池,shutdown()方法关闭线程池,awaitTermination()

🎜🎜Asynchronous Programming🎜: 🎜🎜rrreee🎜Dalam contoh ini, kaedah calculateSomething() mensimulasikan operasi yang memakan masa dan kaedah thenAccept() ialah Fungsi panggil balik, apabila kaedah calculateSomething() selesai, kaedah thenAccept() akan dipanggil, sekali gus mengeluarkan "Result: 42". 🎜🎜🎜🎜Pengaturcaraan berbilang benang🎜: 🎜🎜rrreee🎜Dalam contoh ini, kaedah submit() menyerahkan tugas ke kumpulan thread dan shutdown() kaedah menutup kumpulan benang , kaedah awaitTermination() menunggu semua tugasan selesai dan akhirnya mengeluarkan "Semua tugasan selesai.". 🎜

Atas ialah kandungan terperinci Senario biasa: Fahami cara menggunakan fungsi panggil balik dalam Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn