Rumah >Java >javaTutorial >Bagaimana untuk Melaksanakan Tugas Tanpa Sekat dengan Java Executors dan CompletableFuture?

Bagaimana untuk Melaksanakan Tugas Tanpa Sekat dengan Java Executors dan CompletableFuture?

Patricia Arquette
Patricia Arquetteasal
2024-11-16 17:28:03896semak imbas

How to Execute Tasks Non-Blockingly with Java Executors and CompletableFuture?

Pelaksanaan Tugasan Tidak Menyekat dengan Pelaksana Java

Apabila bekerja dengan berbilang barisan tugas, adalah penting untuk mengelakkan operasi menyekat yang boleh memakan penggunaan berlebihan ruang timbunan. Artikel ini meneroka cara menggunakan pakej java.util.concurrent Java untuk menyerahkan tugas kepada pelaksana tanpa menyekat, memanfaatkan panggilan balik untuk pemberitahuan penyelesaian tugas.

Pendekatan Panggilan Balik

Tentukan antara muka panggil balik yang menerima keputusan yang dikehendaki atau status penyiapan tugas. Laksanakan kelas pembalut yang menerima kedua-dua tugasan dan panggilan balik. Apabila tugasan selesai, pembalut memanggil panggilan balik.

CompletableFuture and Asynchronous Execution

Java 8 memperkenalkan CompletableFuture, yang menawarkan mekanisme yang lebih canggih untuk mengarang tak segerak dan bersyarat saluran paip. Cipta CompletableFuture yang melaksanakan tugas dalam kumpulan benang. Kemudian, lampirkan pendengar pada masa hadapan yang akan digunakan selepas tugasan selesai.

Contoh

Coretan kod berikut menunjukkan penggunaan CompletableFuture untuk pelaksanaan tugas tanpa sekatan :

import java.util.concurrent.CompletableFuture;

// Service class to perform the task
class ExampleService {
    public String work() {
        // Simulated work
        char[] str = new char[5];
        ThreadLocalRandom current = ThreadLocalRandom.current();
        for (int idx = 0; idx < str.length; ++idx)
            str[idx] = (char) ('A' + current.nextInt(26));
        String msg = new String(str);
        System.out.println("Generated message: " + msg);
        return msg;
    }
}

// Main class
public class Main {
    public static void main(String[] args) {
        ExampleService svc = new ExampleService();
        CompletableFuture<String> f = CompletableFuture.supplyAsync(svc::work);
        
        // Attach a listener to the future
        f.thenAccept(result -> System.out.println("Result: " + result));
        
        // Main method can continue execution without blocking
        System.out.println("Main method exiting");
    }
}

Kod ini mencipta CompletableFuture yang melaksanakan kaedah work() secara tidak segerak. Kaedah thenAccept() melampirkan pendengar yang akan digunakan apabila CompletableFuture selesai, membenarkan pelaksanaan tugas tanpa sekatan.

Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Tugas Tanpa Sekat dengan Java Executors dan CompletableFuture?. 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