RecursiveTask表单Java 7花费的时间比预期的要长

时间:2017-01-30 22:53:05

标签: java java.util.concurrent recursivetask

我正在使用来自Java 7的并发包的RecursiveTask。它说这个类有forkJoin方法的实现,可以在不同的线程中分割我的任务。所以我使用了来自Java doc的fibonacci示例,并将执行时间与正常的递归fibonacci进行了比较。令我惊讶的是,正常的递归花费的时间更少!为什么?我做错了吗?

import java.util.concurrent.RecursiveTask;

public class FibonacciJava extends RecursiveTask<Long> {

    private static final long serialVersionUID = -2495228492435217747L;

    private long n;

    protected long valor;

    public FibonacciJava(long n) {
        this.n = n;
    }

    @Override
    protected Long compute() {
        if (n <= 1) {
            return n;
        }
        FibonacciJava f1 = new FibonacciJava(n - 1);
        f1.fork();
        FibonacciJava f2 = new FibonacciJava(n - 2);
        return f2.compute() + f1.join();
    }

    public long fibonacci(long valor) {
        if (valor <= 1)
            return valor;
        else {
            return fibonacci(valor - 1) + fibonacci(valor - 2);
        }
    }

    public static void main(String[] args) {

        long value = 40;

        FibonacciJava fibonacciJava = new FibonacciJava(value);

        long startTimeMillis = System.currentTimeMillis();
        System.out.println("RecursiveTask FibonacciJava: "
                + fibonacciJava.compute() + " in "
                + (System.currentTimeMillis() - startTimeMillis)
                + " miliseconds.");

        startTimeMillis = System.currentTimeMillis();
        System.out.println("Recursive FibonacciJava: "
                + fibonacciJava.fibonacci(value) + " in "
                + (System.currentTimeMillis() - startTimeMillis)
                + " miliseconds.");
    }
}

时间:

RecursiveTask FibonacciJava: 102334155 in 3681 miliseconds.
Recursive FibonacciJava: 102334155 in 573 miliseconds.

0 个答案:

没有答案