>  기사  >  Java  >  Java 함수 동시성 및 멀티스레딩에서 FutureTask와 Callable의 차이점은 무엇입니까?

Java 함수 동시성 및 멀티스레딩에서 FutureTask와 Callable의 차이점은 무엇입니까?

WBOY
WBOY원래의
2024-04-27 10:45:01410검색

Java 함수 동시성 및 멀티스레딩에서 FutureTask와 Callable의 차이점은 무엇입니까?

FutureTask와 Callable: Java 동시성의 차이

Java 동시 프로그래밍에서는 FutureTaskCallable이 중요한 역할을 하며, 둘 사이의 차이점은 차이점은 다음과 같습니다. FutureTaskCallable 扮演着重要的角色,它们之间的区别在于:

Callable

  • 表示一个可以被并发执行的任务。
  • 类似于 Runnable,但具有返回值。
  • 定义了一个 call() 方法,返回任务的结果。

FutureTask

  • 实现 Future 接口,表示正在执行或已完成的异步任务。
  • 包装一个 Callable 对象,用于管理任务执行的细节。
  • 提供方法来获取任务结果(get())并检查任务是否完成(isDone())。

区别

特征 Callable FutureTask
返回值 无返回值 返回任务结果
多结果支持 不支持 支持多个 FutureTask 代表同一 Callable
取消任务 不支持 支持通过调用 cancel() 取消任务
异常处理 call() 方法中处理 FutureTask 提供 get() 方法来处理异常

实战案例

假设我们有一个简单任务,计算斐波那契数列的第一个 n 个元素。

Callable 实现:

import java.util.concurrent.Callable;

public class FibonacciCallable implements Callable<Integer[]> {

    private int n;

    public FibonacciCallable(int n) {
        this.n = n;
    }

    @Override
    public Integer[] call() {
        Integer[] fibSequence = new Integer[n];
        fibSequence[0] = 0;
        fibSequence[1] = 1;
        for (int i = 2; i < n; i++) {
            fibSequence[i] = fibSequence[i - 1] + fibSequence[i - 2];
        }
        return fibSequence;
    }
}

FutureTask 实现:

import java.util.concurrent.FutureTask;
import java.util.concurrent.ExecutionException;

public class FibonacciFutureTask {

    public static void main(String[] args) {
        int n = 10;
        FibonacciCallable callable = new FibonacciCallable(n);
        FutureTask<Integer[]> futureTask = new FutureTask<>(callable);
        new Thread(futureTask).start();

        Integer[] fibSequence;
        try {
            fibSequence = futureTask.get();  // 等待任务完成并获取结果
        } catch (InterruptedException | ExecutionException e) {
            e.printStackTrace();
        }

        System.out.println("Fibonacci sequence upto " + n + " elements:");
        for (Integer fib : fibSequence) {
            System.out.print(fib + " ");
        }
    }
}

在此示例中,我们使用 Callable 来定义任务,使用 FutureTask 来管理任务执行。通过调用 get()

🎜Callable🎜🎜
  • 동시에 실행할 수 있는 작업을 나타냅니다.
  • Runnable과 유사하지만 반환 값이 있습니다.
  • call() 메서드는 작업 결과를 반환하도록 정의됩니다.
🎜🎜FutureTask🎜🎜
  • 실행 중이거나 완료되는 비동기 작업을 나타내기 위해 Future 인터페이스를 구현합니다.
  • Callable 객체를 래핑하여 작업 실행 세부정보를 관리합니다.
  • 작업 결과를 가져오는 메서드(get())를 제공하고 작업이 완료되었는지 확인하는 메서드(isDone())를 제공합니다.
🎜🎜Difference🎜🎜 예외 처리
기능 호출 가능 FutureTask
반환 값 반환 값 없음 작업 결과 반환
다수 결과 지원 지원되지 않음 동일한 호출 가능을 나타내는 여러 FutureTask 지원
작업 취소 지원되지 않음 cancel()을 호출하여 작업 취소를 지원합니다.
call() FutureTaskget() 메소드는 예외 처리
🎜🎜Practical 사례🎜🎜🎜피보나치 수열의 처음 n개 요소를 계산하는 간단한 작업이 있다고 가정합니다. 🎜🎜🎜Callable 구현: 🎜🎜rrreee🎜🎜FutureTask 구현: 🎜🎜rrreee🎜이 예에서는 Callable을 사용하여 작업을 정의하고 FutureTask를 사용하여 작업 실행을 관리합니다. . get() 메서드를 호출하면 작업이 완료된 후 피보나치 수열을 얻을 수 있습니다. 🎜

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

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.