使用future模式完成耗时的背景作业[jdk1.5 concurrency] -凯发k8网页登录

mysql资料,java技术,管理思想,博弈论,ajax,xp极限编程,h.264,hevc,hdr
随笔 - 86, 文章 - 59, 评论 - 1069, 引用 - 0
数据加载中……

使用future模式完成耗时的背景作业[jdk1.5 concurrency]


个人理解
future 模式就是在主线程中当需要进行比较耗时的作业,但不想阻塞主线程的作业时,将耗时作业交由 future 对象在后台中完成,当主线程将来(这个 future 的意义也就体现在这里了)需要时即可通过 future 对象获得已经作业对象。  

这里写了一个简单的例子来说明这种模式,其实写这个例子主要是自己想熟悉一下 jdk5 concurrency 包中 futuretask 的用法了。例子模拟的是一个会计算账的过程,主线程中已经获得其他帐户的总额了,为了不让主线程等待 privateaccount 返回而启用新的线程去处理,并使用 futuretask 对象来监控,最后需要计算总额的时候再尝试去获得 privateaccount 的信息。

 

代码如下:

 1 package  testcallable;
 2
 3 import  java.util.random;
 4 import  java.util.concurrent.callable;
 5 import  java.util.concurrent.executionexception;
 6 import  java.util.concurrent.futuretask;
 7
 8 /**
 9  *  @author  chenpengyi
10   */

11 public   class  sumaccountexample  {
12
13      public   static   void  main(string[] args)  {
14          //  init callable object and future task
15         callable paccount  =   new  privateaccount();
16         futuretask futuretask  =   new  futuretask(paccount);
17         
18          //  create a new thread to do so
19         thread paccountthread  =   new  thread(futuretask);
20         paccountthread.start();
21         
22          //  do something else in the main thread
23         system.out.println( " doing something else here. " );
24         
25          //  get the total money from other accounts 
26          int  totalmoney  =   new  random().nextint( 100000 );
27         system.out.println( " you have  "    totalmoney    "  in your other accounts. " );
28         system.out.println( " waiting for data from private account " );
29          //  if the future task is not finished, we will wait for it
30          while ( ! futuretask.isdone()) {
31              try   {
32                 thread.sleep( 5 );
33             }
  catch  (interruptedexception e)  {
34                 e.printstacktrace();
35             }

36         }

37         integer privataaccountmoney  =   null ;
38          //  since the future task is done, get the object back
39          try   {
40             privataaccountmoney  =  (integer)futuretask.get();
41         }
  catch  (interruptedexception e)  {
42             e.printstacktrace();
43         }
  catch  (executionexception e)  {
44             e.printstacktrace();
45         }

46         system.out.println( " the total moeny you have is  "    (totalmoney   privataaccountmoney.intvalue()));
47     }

48
49 }

50
51
52 class  privateaccount  implements  callable {
53
54     integer totalmoney;
55     
56     @override
57      public  integer call()  throws  exception  {
58          //  simulates a time conusimg task, sleep for 10s
59         thread.sleep( 10000 );
60         totalmoney  =   new  integer( new  random().nextint( 10000 ));
61         system.out.println( " you have  "    totalmoney    "  in your private account. " );
62          return  totalmoney;
63     }

64     
65 }

主线程获得了返回后即完成了总额的计算。

posted on 2007-11-01 13:11 benchensz 阅读(4263) 评论(8)  编辑  收藏 所属分类: 随便写写(比较有用,值得看看)

# re: 使用future模式完成耗时的背景作业[jdk1.5 concurrency]  回复     

good!
2007-11-01 20:56 |

# re: 使用future模式完成耗时的背景作业[jdk1.5 concurrency]  回复     

陈先生,陈太也来这里捣乱了,哼哼
捣乱捣乱,不安不安
欺负你
欺负你
哼哼!!!
2008-03-09 23:20 |

# re: 使用future模式完成耗时的背景作业[jdk1.5 concurrency]  回复     

陈先生,这里的东西看不懂,
因为没有陈太很漂漂的照片也,
发表一下爱的宣言,写个小程序嘛
还要用vfp哦
呵呵
看你这里挺多人捧场的,o(∩_∩)o...,都不知道那个计量经济学术语有什么用
那么多人赞你
威威地啦。。。陈先生!!!呵呵
2008-03-09 23:24 |

# re: 使用future模式完成耗时的背景作业[jdk1.5 concurrency]  回复     

如果能够在future中加入listener就好了,这样可以在futher状态变化的时候callback回来,不然每次都去查询显示是不合理的
2008-06-12 10:09 |

# re: 使用future模式完成耗时的背景作业[jdk1.5 concurrency]  回复     

不仅加上listener,还需要在futher中最好加上wait方法,某些必须要等到futher执行完的动作可以在listener中完成,也可以调用wait等待,这样就简单了
2008-06-12 10:12 |

# cheap jordan  回复     

my brother saved this web site for me and i have been going through it for the past several hrs. this is really going to assist me and my friends for our class project. by the way, i like the way you write.
2012-08-14 14:56 |

# re: 使用future模式完成耗时的背景作业[jdk1.5 concurrency]  回复     

很好的网站
2012-11-28 10:55 |

# re: 使用future模式完成耗时的背景作业[jdk1.5 concurrency]  回复     

它帮助我很多解决一些问题。其机会是如此美妙和工作组的麦粒肿,速度如此之快。我认为它可能会帮助你的所有。谢谢你。
2013-02-25 16:36 |
网站地图