【发布时间】:2019-06-24 10:11:09
【问题描述】:
我们需要在一个 forkjoinpool 中将一个素数计算拆分为多个递归任务。
我们有一个质数列表和一个工作负载大小,比如 5。 因此,如果我们要计算 50 的质因数,我们将所有质数都设为 25 并计算质因数。工作负载大小是单个递归任务将处理的素数数量。
我做了什么:
Long[] workLoad = new Long[primes.size()];
workLoad = primes.toArray(workLoad);
pool = new ForkJoinPool();
ForkJoinWorker worker = new ForkJoinWorker(workLoad, q, partitionSize, 0);
pool.execute(worker);
resultList = worker.invoke();
workLoad = 所有素数的数组。
q = 我们要计算质因数的数。
ForkJoinWorker 扩展了一个 RecursiveTask>
在递归任务中,我查看 workLoadSize 是否大于我得到的素数数组,如果是,我创建一个新的
ForkJoinWorker f = new ForkJoinWorker(..);
f.fork();
List<Long> results = calcFactors(...);
results.addAll(f.join);
return results;
我是不是完全搞错了?我总是遇到并发异常和堆栈溢出。我认为我没有正确连接递归任务,因为它总是会导致堆栈溢出。
【问题讨论】:
标签: java recursion primes fork-join