多线程-Callable与斐波那契数列 Java

题目详情:

6-4 jmu-Java-07多线程-Callable与斐波那契数列 (10 分)

使用Callable、Future以多线程的方式求解前n项斐波那契数的和。

题目内容

定义CalculateTask类,实现Callable接口
属性:private int n,代表要求n的斐波那契数列。
无参构造函数public CalculateTask(int n),给属性n赋值。
任务功能:返回n的斐波那契数值。

###main方法说明:

  1. n为后面创建的任务数量。
  2. taskList为计算斐波那契数的任务集合。
  3. results为任务完成后返回的结果集合。
  4. main方法最后使用System.out.println("sum="+sum);输出结果

###答案应包括:

  1. main方法的后半部分。注意,要包含两个},分别对应着main方法与Main的{
  2. 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;
	}
	
}

猜你喜欢

转载自blog.csdn.net/qq_54587141/article/details/121213938
今日推荐