package jiangning.c21.ex;
import java.util.Arrays;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import net.mindview.util.Generator;
/**
* Java编程思想 第四版 c21 并发
* 练习4:遵循generic/Fibonacci.java的形式,创建一个任务,
* 它可以产生由n个斐波那契数字组成的序列,其中n是通过任务
* 的构造器而提供的,使用线程创建大量这样的任务并驱动他们。
* @author JiangNing
* 2012.10.6
*
*/
public class ExerciseFour implements Runnable,Generator<Integer> {
private int n;
private int count = 0;
public Integer next() { return fib(count++); }//实现Generator接口
public ExerciseFour(){}
public ExerciseFour(int n){//含有构造参数的构造器
this.n = n;
System.out.println("ExerciseTwo " + n);
}
@Override
public void run() {
Integer[] sequence = new Integer[n];//定义一个数组准备放入生成的数字
for(int i=0; i<n; i++){
sequence[i] = next();//给数组进行赋值
}
System.out.println("sequence " + n + " : " + Arrays.toString(sequence));//打印产生的位数和数组。
}
private int fib(int n) {//利用递归进行调用,注意退出条件。
if(n < 2) return 1;
return fib(n-2) + fib(n-1);
}
public static void main(String[] args) {
ExecutorService exec = Executors.newCachedThreadPool();
for(int i=1; i<10; i++){
exec.execute(new ExerciseFour(i));
}
exec.shutdown();
}
}
/**
* 运行结果
ExerciseTwo 1
ExerciseTwo 2
sequence 1 : [1]
ExerciseTwo 3
sequence 2 : [1, 1]
ExerciseTwo 4
sequence 3 : [1, 1, 2]
ExerciseTwo 5
ExerciseTwo 6
ExerciseTwo 7
sequence 5 : [1, 1, 2, 3, 5]
sequence 4 : [1, 1, 2, 3]
ExerciseTwo 8
ExerciseTwo 9
sequence 8 : [1, 1, 2, 3, 5, 8, 13, 21]
sequence 7 : [1, 1, 2, 3, 5, 8, 13]
sequence 6 : [1, 1, 2, 3, 5, 8]
sequence 9 : [1, 1, 2, 3, 5, 8, 13, 21, 34]
*/
本文介绍了一个Java程序,该程序利用多线程并发生成不同长度的斐波那契数列。通过实现Runnable接口和Generator接口,文章展示了如何创建可产生斐波那契数列的任务,并使用线程池来驱动这些任务。
1541

被折叠的 条评论
为什么被折叠?



