(10)21.2.4.1 并发 练习 5
2012-11-05 20:38
204 查看
[align=left]package jiangning.c21.ex;[/align]
[align=left]import java.util.ArrayList;[/align]
[align=left]import java.util.concurrent.Callable;[/align]
[align=left]import java.util.concurrent.ExecutionException;[/align]
[align=left]import java.util.concurrent.ExecutorService;[/align]
[align=left]import java.util.concurrent.Executors;[/align]
[align=left]import java.util.concurrent.Future;[/align]
[align=left]import net.mindview.util.Generator;[/align]
[align=left]/**[/align]
[align=left] * Java编程思想 第四版 c21 并发 [/align]
[align=left] * 练习5:修改练习2,使得计算所有斐波那契数字的数值总和的[/align]
[align=left] * 任务成为 Callable。 创建多个任务并显示结果。[/align]
[align=left] * 练习2:遵循generic/Fibonacci.java的形式,创建一个任务,[/align]
[align=left] * 它可以产生由n个斐波那契数字组成的序列,其中n是通过任务[/align]
[align=left] * 的构造器而提供的,使用线程创建大量这样的任务并驱动他们。[/align]
[align=left] * @author JiangNing[/align]
[align=left] * 2012.10.5[/align]
[align=left] *[/align]
[align=left] */[/align]
public class Exercise5 implements Callable<Integer>,Generator<Integer>
{
[align=left] private int n ;[/align]
private int count =
0;
public Integer
next() { return fib(count++);
} //实现Generator接口
[align=left] public Exercise5(){}[/align]
[align=left] public Exercise5(int n){//含有构造参数的构造器[/align]
this.n =
n;
System. out.println("Exercise5
" + n);
[align=left] }[/align]
private int fib(int n)
{ //利用递归进行调用,注意退出条件。
if(n
< 2) return 1;
return fib(n-2)
+ fib(n-1);
[align=left] }[/align]
public static void main(String[]
args) {
[align=left] ExecutorService exec = Executors. newCachedThreadPool();[/align]
[align=left] ArrayList<Future<Integer>> results = new ArrayList<Future<Integer>>();[/align]
for(int i=1;
i<10; i++){
[align=left] results.add(exec.submit( new Exercise5(i)));[/align]
[align=left] }[/align]
[align=left] Thread. yield();[/align]
[align=left] exec.shutdown();[/align]
for(Future<Integer>
fi : results){
[align=left] try {[/align]
[align=left] System. out.println(fi.get());[/align]
} catch (InterruptedException
e) {
[align=left] e.printStackTrace();[/align]
} catch (ExecutionException
e) {
[align=left] e.printStackTrace();[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] @Override[/align]
public Integer
call() throws Exception
{
int sum
= 0;//总和
for(int i=0;
i<n; i++){
[align=left] sum = sum + next(); //求和[/align]
[align=left] }[/align]
[align=left] return sum;//返回总和[/align]
[align=left] }[/align]
[align=left]}[/align]
[align=left]/**[/align]
[align=left] * 运行结果[/align]
[align=left]Exercise5 1[/align]
[align=left]Exercise5 2[/align]
[align=left]Exercise5 3[/align]
[align=left]Exercise5 4[/align]
[align=left]Exercise5 5[/align]
[align=left]Exercise5 6[/align]
[align=left]Exercise5 7[/align]
[align=left]Exercise5 8[/align]
[align=left]Exercise5 9[/align]
[align=left]1[/align]
[align=left]2[/align]
[align=left]4[/align]
[align=left]7[/align]
[align=left]12[/align]
[align=left]20[/align]
[align=left]33[/align]
[align=left]54[/align]
[align=left]88[/align]
[align=left] */[/align]
[align=left]import java.util.ArrayList;[/align]
[align=left]import java.util.concurrent.Callable;[/align]
[align=left]import java.util.concurrent.ExecutionException;[/align]
[align=left]import java.util.concurrent.ExecutorService;[/align]
[align=left]import java.util.concurrent.Executors;[/align]
[align=left]import java.util.concurrent.Future;[/align]
[align=left]import net.mindview.util.Generator;[/align]
[align=left]/**[/align]
[align=left] * Java编程思想 第四版 c21 并发 [/align]
[align=left] * 练习5:修改练习2,使得计算所有斐波那契数字的数值总和的[/align]
[align=left] * 任务成为 Callable。 创建多个任务并显示结果。[/align]
[align=left] * 练习2:遵循generic/Fibonacci.java的形式,创建一个任务,[/align]
[align=left] * 它可以产生由n个斐波那契数字组成的序列,其中n是通过任务[/align]
[align=left] * 的构造器而提供的,使用线程创建大量这样的任务并驱动他们。[/align]
[align=left] * @author JiangNing[/align]
[align=left] * 2012.10.5[/align]
[align=left] *[/align]
[align=left] */[/align]
public class Exercise5 implements Callable<Integer>,Generator<Integer>
{
[align=left] private int n ;[/align]
private int count =
0;
public Integer
next() { return fib(count++);
} //实现Generator接口
[align=left] public Exercise5(){}[/align]
[align=left] public Exercise5(int n){//含有构造参数的构造器[/align]
this.n =
n;
System. out.println("Exercise5
" + n);
[align=left] }[/align]
private int fib(int n)
{ //利用递归进行调用,注意退出条件。
if(n
< 2) return 1;
return fib(n-2)
+ fib(n-1);
[align=left] }[/align]
public static void main(String[]
args) {
[align=left] ExecutorService exec = Executors. newCachedThreadPool();[/align]
[align=left] ArrayList<Future<Integer>> results = new ArrayList<Future<Integer>>();[/align]
for(int i=1;
i<10; i++){
[align=left] results.add(exec.submit( new Exercise5(i)));[/align]
[align=left] }[/align]
[align=left] Thread. yield();[/align]
[align=left] exec.shutdown();[/align]
for(Future<Integer>
fi : results){
[align=left] try {[/align]
[align=left] System. out.println(fi.get());[/align]
} catch (InterruptedException
e) {
[align=left] e.printStackTrace();[/align]
} catch (ExecutionException
e) {
[align=left] e.printStackTrace();[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] @Override[/align]
public Integer
call() throws Exception
{
int sum
= 0;//总和
for(int i=0;
i<n; i++){
[align=left] sum = sum + next(); //求和[/align]
[align=left] }[/align]
[align=left] return sum;//返回总和[/align]
[align=left] }[/align]
[align=left]}[/align]
[align=left]/**[/align]
[align=left] * 运行结果[/align]
[align=left]Exercise5 1[/align]
[align=left]Exercise5 2[/align]
[align=left]Exercise5 3[/align]
[align=left]Exercise5 4[/align]
[align=left]Exercise5 5[/align]
[align=left]Exercise5 6[/align]
[align=left]Exercise5 7[/align]
[align=left]Exercise5 8[/align]
[align=left]Exercise5 9[/align]
[align=left]1[/align]
[align=left]2[/align]
[align=left]4[/align]
[align=left]7[/align]
[align=left]12[/align]
[align=left]20[/align]
[align=left]33[/align]
[align=left]54[/align]
[align=left]88[/align]
[align=left] */[/align]
相关文章推荐
- (20)21.2.9 并发 练习 10
- (36)21.3.6 并发 练习 15---Java编程思想之并发笔记
- C语言学习历程——编程练习2——10
- LINQ体验(10)——LINQ to SQL语句之开放式并发控制和事务
- 《Erlang 程序设计》练习答案 -- 第十三章 并发程序中的错误
- C primer plus 第七章 练习10:
- L练习5-1 求m到n之和(10 分)
- flume高并发优化——(10)消灭elasticsearch sink多次插入
- 10 25日考试 数学题目练习 斐波拉契 打表
- 《Python编程:从入门到实践》课后练习7-1到7-10
- 08-IO流(字符流-练习-复制文本文件_1) 09-IO流(字符流-练习-复制文本文件_2) 10-IO流(字符流-练习-复制文本文件_图解)
- Cocos2D-X学习10:实战练习——一个简单的钢琴
- 设计程序:利用循环编写程序,帮助小学生练习10以内加减法
- [翻译][MVC 5 + EF 6] 10:处理并发
- (37)21.3.6 并发 练习 16---Java编程思想之并发笔记
- Java_21_22_for循环_【最后执行迭代】_练习_奇数偶数_打印1-1000/5的整数_1-10的阶乘_99乘法表
- j.u.c系列(10)---之并发工具类:Semaphore
- Java练习 输出1到10的阶乘的和 回文数 简易菜单 个人所得税
- MVC5+EF6--10 并发处理
- linux 10单元练习