Heim > Java > javaLernprogramm > Wie verwende ich Future und Callable für die asynchrone Programmierung in der gleichzeitigen Java-Programmierung?

Wie verwende ich Future und Callable für die asynchrone Programmierung in der gleichzeitigen Java-Programmierung?

王林
Freigeben: 2024-05-08 10:39:02
Original
704 Leute haben es durchsucht

Verwenden Sie Future und Callable für die asynchrone Java-Programmierung: Future kapselt das Ergebnis einer asynchronen Operation und erhält den Rückgabewert über die Methode get(). Callable wird zum Erstellen asynchroner Aufgaben verwendet, ähnlich wie Runnable, kann jedoch einen Wert zurückgeben. Im Beispiel wird eine Callable-Aufgabe erstellt und zur asynchronen Ausführung an den Executor-Dienst übermittelt. Der Hauptthread führt weiterhin andere Aufgaben aus. Wenn die Ergebnisse benötigt werden, rufen Sie Future.get() auf, um sie abzurufen. Fahren Sie abschließend den Executor-Dienst herunter, um Ressourcen freizugeben.

Java 并发编程中如何使用 Future 和 Callable 进行异步编程?

Asynchrone Programmierung in Java Gleichzeitige Programmierung mit Future und Callable

Einführung

Asynchrone Programmierung ist eine Technik, die die gleichzeitige Ausführung von Aufgaben ermöglicht, ohne den Hauptthread zu blockieren. In Java kann asynchrone Programmierung mithilfe von Future- und Callable-Schnittstellen implementiert werden.

Future

Future ist die Ergebniskapselung einer asynchronen Operation. Es wird verwendet, um den Rückgabewert einer Aufgabe abzurufen, auch wenn die Aufgabe noch nicht abgeschlossen ist. Future stellt die Methode get() bereit, die das Ergebnis zurückgibt, wenn die Aufgabe abgeschlossen ist. get() 方法,当任务完成时,它将返回结果。

Callable

Callable 是一个用于创建异步任务的接口。它与 Runnable 接口类似,但是 Callable 可以返回一个值,而 Runnable 只能执行一个操作。

异步编程示例

下面是一个使用 Future 和 Callable 进行异步编程的示例:

import java.util.concurrent.*;

public class AsyncExample {

    public static void main(String[] args) {

        ExecutorService executorService = Executors.newSingleThreadExecutor();

        // 创建 Callable 任务,它将执行一个耗时的操作并返回结果
        Callable<Integer> task = () -> {
            // 模拟耗时的任务
            Thread.sleep(1000);
            return 42;
        };

        // 将 Callable 任务提交到执行器服务,它将异步执行任务
        Future<Integer> future = executorService.submit(task);

        // 主线程可以继续执行其他任务,而不必等待 Callable 任务完成
        System.out.println("Main thread is doing other work.");

        // 当需要结果时,可以调用 Future 的 get() 方法来获取它
        try {
            // 等待任务完成并获取结果
            Integer result = future.get();
            System.out.println("Result: " + result);
        } catch (InterruptedException | ExecutionException e) {
            // 处理任务中断或执行异常
            e.printStackTrace();
        } finally {
            // 关闭执行器服务以释放资源
            executorService.shutdown();
        }
    }
}
Nach dem Login kopieren

在这个示例中:

  • task 是一个 Callable 任务,它执行一个耗时的操作并返回结果。
  • future 是一个 Future,它封装了 Callable 任务的结果。
  • executorService 是一个执行器服务,它用于异步执行 Callable 任务。
  • 主线程在提交任务后可以继续执行其他任务,无需等待任务完成。
  • 当需要结果时,主线程可以调用 future.get()
Callable🎜🎜🎜Callable ist eine Schnittstelle zum Erstellen asynchroner Aufgaben. Es ähnelt der Runnable-Schnittstelle, Callable kann jedoch einen Wert zurückgeben, während Runnable nur eine Operation ausführen kann. 🎜🎜🎜Beispiel für asynchrone Programmierung🎜🎜🎜Hier ist ein Beispiel für asynchrone Programmierung mit Future und Callable: 🎜rrreee🎜In diesem Beispiel: 🎜
  • task ist eine aufrufbare Aufgabe, die ausgeführt wird ein zeitaufwändiger Vorgang und gibt das Ergebnis zurück. 🎜
  • future ist eine Zukunft, die das Ergebnis der Callable-Aufgabe kapselt. 🎜
  • executorService ist ein Executor-Dienst, der zum asynchronen Ausführen von Callable-Aufgaben verwendet wird. 🎜
  • Der Hauptthread kann nach dem Absenden der Aufgabe weiterhin andere Aufgaben ausführen, ohne auf den Abschluss der Aufgabe warten zu müssen. 🎜
  • Wenn das Ergebnis benötigt wird, kann der Hauptthread die Methode future.get() aufrufen, um es zu erhalten. 🎜🎜

Das obige ist der detaillierte Inhalt vonWie verwende ich Future und Callable für die asynchrone Programmierung in der gleichzeitigen Java-Programmierung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage