> Java > java지도 시간 > 본문

Java 함수 동시성 및 멀티스레딩에서 Future 및 CompletableFuture를 사용하는 방법은 무엇입니까?

王林
풀어 주다: 2024-04-27 16:33:01
원래의
1158명이 탐색했습니다.

Future 및 CompletableFuture는 Java의 동시성 및 멀티스레딩을 위한 도구입니다. Future는 비동기 계산 결과를 나타내며 결과를 얻기 위해 스레드를 차단하는 get() 메서드를 제공합니다. CompletableFuture는 Future를 확장하여 계산 결합, 예외 처리, 콜백 함수 사용과 같은 더욱 풍부한 기능을 제공합니다.

Java 함수 동시성 및 멀티스레딩에서 Future 및 CompletableFuture를 사용하는 방법은 무엇입니까?

Java 함수의 동시성 및 멀티스레딩: Future 및 CompletableFuture 사용

Overview

Future 및 CompletableFuture는 비동기 작업 및 동시 작업을 처리하기 위해 Java 8에 도입된 동시성 도구입니다. 이를 통해 메인 스레드를 차단하지 않고 장기 실행 작업을 수행할 수 있으므로 애플리케이션 성능과 응답성이 향상됩니다.

Future

Future는 비동기 계산 결과를 나타내는 객체입니다. 결과를 사용할 수 있을 때까지 현재 스레드를 차단하는 get() 메서드를 제공합니다. isDone() 메서드를 사용하여 계산이 완료되었는지 확인할 수도 있습니다. get(),用于阻塞当前线程直到结果可用。您还可以使用 isDone() 方法来检查计算是否完成。

CompletableFuture

CompletableFuture 是 Future 的扩展,提供了更丰富的功能。它允许您组合异步计算,处理异常,并使用回调函数。

实战案例

考虑以下示例,使用 Future 来异步加载文件:

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

public class FileLoader {

    public static void main(String[] args) {
        ExecutorService executorService = Executors.newSingleThreadExecutor();
        Future<String> future = executorService.submit(() -> {
            // 异步加载文件
            return loadFile("file.txt");
        });

        // 继续执行其他任务,而不阻塞当前线程
        // ...

        // 当需要结果时,再阻塞主线程获取结果
        String result = future.get();
    }

    private static String loadFile(String filePath) {
        // 模拟文件加载操作
        return "File contents";
    }
}
로그인 후 복사

在这个示例中,我们使用 ExecutorService 创建了一个线程池,然后使用 submit() 提交了一个异步任务,该任务负责加载文件。主线程继续执行其他任务,而不阻塞等待文件加载完成。最后,当需要文件内容时,我们再调用 get()Future 中获取结果。

使用 CompletableFuture

以下示例展示了如何使用 CompletableFuture 来组合异步计算:

import java.util.concurrent.CompletableFuture;

public class CompletableFutureExample {

    public static void main(String[] args) {
        // 定义第一个异步计算
        CompletableFuture<Integer> firstResult = CompletableFuture.supplyAsync(() -> {
            // 计算第一个结果
            return 5;
        });

        // 定义第二个异步计算
        CompletableFuture<Integer> secondResult = CompletableFuture.supplyAsync(() -> {
            // 计算第二个结果
            return 10;
        });

        // 组合两个计算,将它们的结果相加
        CompletableFuture<Integer> combinedResult = firstResult.thenCombine(secondResult, (x, y) -> x + y);

        // 获取最终结果
        int result = combinedResult.get();
    }
}
로그인 후 복사

在这个示例中,我们使用 CompletableFuture#supplyAsync() 创建了两个异步计算。然后,我们使用 CompletableFuture#thenCombine() 将它们组合起来,将它们的结果相加。最后,我们使用 CompletableFuture#get()

CompletableFuture

🎜🎜CompletableFuture는 Future의 확장으로 더욱 풍부한 기능을 제공합니다. 이를 통해 비동기 계산을 구성하고, 예외를 처리하고, 콜백 함수를 사용할 수 있습니다. 🎜🎜🎜실용 사례🎜🎜🎜파일을 비동기적으로 로드하기 위해 Future를 사용하는 다음 예를 고려하세요. 🎜rrreee🎜이 예에서는 ExecutorService를 사용하여 스레드 풀을 생성합니다. 파일 로드를 담당하는 비동기 작업을 제출하려면 submit()을 사용하세요. 메인 스레드는 파일이 로드되기를 기다리지 않고 계속해서 다른 작업을 수행합니다. 마지막으로 파일 내용이 필요할 때 get()을 호출하여 Future에서 결과를 가져옵니다. 🎜🎜🎜Using CompletableFuture🎜🎜🎜다음 예에서는 CompletableFuture를 사용하여 비동기 계산을 작성하는 방법을 보여줍니다. 🎜rrreee🎜이 예에서는 CompletableFuture#supplyAsync()를 사용하여 두 개의 비동기 계산을 만듭니다. 그런 다음 CompletableFuture#thenCombine()을 사용하여 결합하여 결과를 추가합니다. 마지막으로 CompletableFuture#get()을 사용하여 최종 결과를 얻습니다. 🎜🎜간단히 말하면 Future와 CompletableFuture는 비동기 작업과 동시 작업을 처리하기 위한 강력한 도구입니다. 이러한 도구를 사용하면 애플리케이션의 성능과 응답성을 향상시켜 보다 효율적이고 확장 가능한 코드를 만들 수 있습니다. 🎜

위 내용은 Java 함수 동시성 및 멀티스레딩에서 Future 및 CompletableFuture를 사용하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿