快速业务通道

Java开发2.0: Kilim简介 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-14
  this.answer = ans;   }   public BigDecimal getAnswer(){   return answer;   }   public String printAnswer() {   return "The answer of " + dividend + " divided by " + divisor +    " is " + answer;   } }

Java开发2.0: Kilim简介(4)

时间:2011-10-22 IBM Andrew Glover

DeferredDivision

DeferredDivision 类中使用了特定于 Kilim 的类。该类执行多项操作,但总体来讲它的工作非常简 单:使用随机数(类型为 BigDecimal)创建 Calculation 的实例,将它们发送到 Calculator 角色。而 且,该类还会检查共享的 MailBox,以查看其中是否有任何 Calculation。如果检索到的一个 Calculation 实例有一个答案,DeferredDivision 将打印它。

清单 2. DeferredDivision 创建随机除数和被除数

import java.math.BigDecimal; import java.math.MathContext; import java.util.Date; import java.util.Random; import kilim.Mailbox; import kilim.Pausable; import kilim.Task; public class DeferredDivision extends Task {   private Mailbox<Calculation> mailbox;   public DeferredDivision(Mailbox<Calculation> mailbox) {   super();   this.mailbox = mailbox;   }   @Override   public void execute() throws Pausable, Exception {   Random numberGenerator = new Random(new Date().getTime());   MathContext context = new MathContext(8);   while (true) {    System.out.println("I need to know the answer of something");    mailbox.putnb(new Calculation(      new BigDecimal(numberGenerator.nextDouble(), context),     new BigDecimal(numberGenerator.nextDouble(), context)));    Task.sleep(1000);    Calculation answer = mailbox.getnb(); // no block     if (answer != null && answer.getAnswer() != null) {    System.out.println("Answer is: " + answer.printAnswer());    }   }   } }

从清单 2 可以看到,DeferredDivision 类扩展了 Kilim 的 Task 类型,后者实际上模仿了角色模型 。注意,该类还改写了 Task 的 execute 方法,后者默认情况下抛出 Pausable。因此,execute 的操作 将在 Kilim 的调度程序控制下进行。也就是说,Kilim 将确保 execute 以一种安全的方式并行地运行。

在 execute 方法内部,DeferredDivision 创建 Calculation 的实例并将它们放在 Mailbox 中。它 使用 putnb 方法以一种非阻塞方式完成此任务。

填充 mailbox 后,DeferredDivision 进入休眠状态 —— 注意,与处于休眠状态的内核线程不同, 它是由 Kilim 托管的轻量型线程。当角色唤醒之后,像前面提到的一样,它在 mailbox 中查找任何 Calculation。此调用也是非阻塞的,这意味着 getnb 可以返回 null。如果 DeferredDivision 找到一 个 Calculation 实例,并且该实例的 getAnswer 方法有一个值(也就是说,不是一个已由 Calculator 类型处理过的 Calculation 实例),它将该值打印到控制台。

Java开发2.0: Kilim简介(5)

时间:2011-10-22 IBM Andrew Glover

Calculator

Mailbox 的另一端是 Calculator。与清单 2 中定义的 DeferredDivision 角色类似,Calculator 也 扩展了 Kilim 的 Task 并实现了 execute 方法。一定要注意两个角色都共享同一个 Mailbox 实例。它 们不能与不同的 Mailbox 通信,它们需要共享一个实例。相应

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号