(8)21.2.3 并发 练习4

本文介绍了一个Java程序,该程序利用多线程并发生成不同长度的斐波那契数列。通过实现Runnable接口和Generator接口,文章展示了如何创建可产生斐波那契数列的任务,并使用线程池来驱动这些任务。
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]

*/


 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值