FutureTask와 Callable: Java 동시성의 차이
Java 동시 프로그래밍에서는 FutureTask
와 Callable
이 중요한 역할을 하며, 둘 사이의 차이점은 차이점은 다음과 같습니다. FutureTask
和 Callable
扮演着重要的角色,它们之间的区别在于:
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()
Runnable
과 유사하지만 반환 값이 있습니다. call()
메서드는 작업 결과를 반환하도록 정의됩니다. Future
인터페이스를 구현합니다. Callable
객체를 래핑하여 작업 실행 세부정보를 관리합니다. get()
)를 제공하고 작업이 완료되었는지 확인하는 메서드(isDone()
)를 제공합니다. 기능 | 호출 가능 | FutureTask |
---|---|---|
반환 값 | 반환 값 없음 | 작업 결과 반환 |
다수 결과 지원 | 지원되지 않음 | 동일한 호출 가능 을 나타내는 여러 FutureTask 지원 |
작업 취소 | 지원되지 않음 |
cancel() 을 호출하여 작업 취소를 지원합니다. |
call() 은 |
FutureTask 및 get() 메소드는 예외 처리
|
Callable
을 사용하여 작업을 정의하고 FutureTask
를 사용하여 작업 실행을 관리합니다. . get()
메서드를 호출하면 작업이 완료된 후 피보나치 수열을 얻을 수 있습니다. 🎜위 내용은 Java 함수 동시성 및 멀티스레딩에서 FutureTask와 Callable의 차이점은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!