マルチスレッド-呼び出し可能でフィボナッチ数列のJava

トピックの詳細:

6-4 jmu-Java-07マルチスレッド-呼び出し可能およびフィボナッチ数列(10ポイント)

Callable、Futureマルチスレッド方式で最初のn個のフィボナッチ数の合計を解くために使用します。

トピックコンテンツ

nを必要とするフィボナッチ数列を表すインターフェイスプロパティCalculateTaskを実装するクラスを定義します。引数なしのコンストラクター。プロパティnに値を割り当てます。タスク関数: nのフィボナッチ値を返します。Callable
private int n
public CalculateTask(int n)

###メインメソッドの説明:

  1. n後で作成するタスクの数。
  2. taskListフィボナッチ数を計算するためのタスクのコレクション。
  3. resultsタスクの完了後に返される結果セット。
  4. mainメソッドは最終的にSystem.out.println("sum="+sum);出力結果を使用します

###回答には以下を含める必要があります。

  1. メインメソッドの後半。}mainメソッドとMainメソッドにそれぞれ対応する2つを含める必要があることに注意してください。{
  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