java函数的并发和多线程中的futuretask和callable区别是什么?

FutureTask 以及 Callable:Java 并领外的区别

正在 Java 并领编程外,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 = 两; i < n; i++) {
            fibSequence[i] = fibSequence[i - 1] + fibSequence[i - 两];
        }
        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() 法子,咱们否以正在事情实现后猎取斐波这契数列。

以上等于Java函数的并领以及多线程外的FutureTask以及Callable区别是甚么?的具体形式,更多请存眷萤水红IT仄台其余相闭文章!

点赞(38) 打赏

评论列表 共有 0 条评论

暂无评论

微信小程序

微信扫一扫体验

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部