FutureTask et Callable : La différence dans la concurrence Java
Dans la programmation simultanée Java, FutureTask
et Callable
jouent un rôle important, et la différence entre eux la différence est : 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
, mais avec une valeur de retour. call()
est définie pour renvoyer le résultat de la tâche. Future
pour représenter les tâches asynchrones en cours d'exécution ou terminées. Callable
pour gérer les détails de l'exécution de la tâche. get()
) et vérifiez si la tâche est terminée (isDone()
). Fonctionnalités | Appelable | FutureTask |
---|---|---|
Valeur de retour | Aucune valeur de retour | Renvoyer les résultats de la tâche |
Beaucoup Prise en charge des résultats | Non pris en charge | Prise en charge de plusieurs FutureTask représentant le même Callable
|
Annulation des tâches | Non pris en charge | Prend en charge l'annulation des tâches en appelant cancel()
|
call() est gérée dans la méthode |
FutureTask et le get() est fournie pour Gestion des exceptions
|
Callable
pour définir la tâche et FutureTask
pour gérer l'exécution de la tâche. . En appelant la méthode get()
, nous pouvons obtenir la séquence de Fibonacci une fois la tâche terminée. 🎜Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!