トピックの詳細:
6-4 jmu-Java-07マルチスレッド-呼び出し可能およびフィボナッチ数列(10ポイント)
Callable、Future
マルチスレッド方式で最初のn個のフィボナッチ数の合計を解くために使用します。
トピックコンテンツ
nを必要とするフィボナッチ数列を表すインターフェイスプロパティCalculateTask
を実装するクラスを定義します。引数なしのコンストラクター。プロパティnに値を割り当てます。タスク関数: nのフィボナッチ値を返します。Callable
private int n
public CalculateTask(int n)
###メインメソッドの説明:
n
後で作成するタスクの数。taskList
フィボナッチ数を計算するためのタスクのコレクション。results
タスクの完了後に返される結果セット。main
メソッドは最終的にSystem.out.println("sum="+sum);
出力結果を使用します
###回答には以下を含める必要があります。
- メインメソッドの後半。
}
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;
}
}