题目详情:
6-4 jmu-Java-07多线程-Callable与斐波那契数列 (10 分)
使用Callable、Future
以多线程的方式求解前n项斐波那契数的和。
题目内容
定义CalculateTask
类,实现Callable
接口
属性:private int n
,代表要求n的斐波那契数列。
无参构造函数public CalculateTask(int n)
,给属性n赋值。
任务功能:返回n的斐波那契数值。
###main方法说明:
n
为后面创建的任务数量。taskList
为计算斐波那契数的任务集合。results
为任务完成后返回的结果集合。main
方法最后使用System.out.println("sum="+sum);
输出结果
###答案应包括:
- main方法的后半部分。注意,要包含两个
}
,分别对应着main方法与Main的{
CalculateTask
类的定义
####裁判程序示例
public class Main {
public static void main(String[] args) throws InterruptedException {
ExecutorService exec = Executors.newCachedThreadPool();
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();//num of tasks
List<CalculateTask> taskList = new ArrayList<CalculateTask>();
List<Future<Integer>> results = new ArrayList<Future<Integer>>();
int sum = 0;
/*你的答案:*/
答案代码:
for(int i=1;i<=n;i++)
{
taskList.add(new CalculateTask(i));
results.add(exec.submit(new CalculateTask(i)));
}
exec.shutdown();
for(Future<Integer> fi : results)
{
try
{
sum=fi.get();
}
catch(Exception e)
{
e.printStackTrace();
}
}
System.out.println("sum="+sum);
}
}
class CalculateTask implements Callable<Integer>
{
private int n;
public CalculateTask(int n)
{
this.n=n;
}
@Override
public Integer call()
{
int sum=1,fib1=0,fib2=1,fib3=1;
for(int i=2;i<=n;i++)
{
fib3=fib1+fib2;
fib1=fib2;
fib2=fib3;
sum+=fib3;
} //求斐波那契数列前n项和
return sum;
}
}