快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-14
地,两个角色都通过它们的构造函数接受 一个有类型 Mailbox。

清单 3. 最终的实际运算角色:Calculator

import java.math.RoundingMode; import kilim.Mailbox; import kilim.Pausable; import kilim.Task; public class Calculator extends Task{   private Mailbox<Calculation> mailbox;   public Calculator(Mailbox<Calculation> mailbox) {   super();   this.mailbox = mailbox;   }   @Override   public void execute() throws Pausable, Exception {   while (true) {    Calculation calc = mailbox.get(); // blocks     if (calc.getAnswer() == null) {    calc.setAnswer(calc.getDividend().divide(calc.getDivisor(), 8,     RoundingMode.HALF_UP));    System.out.println("Calculator determined answer");    mailbox.putnb(calc);    }    Task.sleep(1000);   }   } }

Calculator 的 execute 方法与 DeferredDivision 的相应方法一样,不断循环查找共享 Mailbox 中 的项。区别在于 Calculator 调用 get 方法,这是一种阻塞调用。相应地,当一条 Calculation “消息 ” 显示时,它执行请求的除法运算。最后,Calculator 将修改的 Calculation 放回到 Mailbox 中(采 用非阻塞方式),然后进入休眠状态。两个角色中的休眠调用都仅用于简化控制台的读取。

Java开发2.0: Kilim简介(6)

时间:2011-10-22 IBM Andrew Glover

Kilim 的 weaver

在前面,我提到了 Kilim 通过其 weaver 执行字节码操作。这是一个简单的后处理过程,您在编译了 类之后 运行它。weaver 然后将一些特殊代码添加到包含 Pausable 标记的各种类和方法中。

调用 weaver 非常简单。举例而言,在清单 4 中,我使用 Ant 调用 Weaver。我需要做的只是告诉 Weaver 我需要的类在哪里,以及在哪里放置生成的字节码。在这个例子中,我让 Weaver 更改 target/classes 字典中的类,并将生成的字节码写回到该字典。

清单 4. Ant 调用 Kilim 的 weaver

<target name="weave" depends="compile" description="handles Kilim byte  code weaving">   <java classname="kilim.tools.Weaver" fork="yes">   <classpath refid="classpath" />   <arg value="-d" />   <arg value="./target/classes" />   <arg line="./target/classes" />   </java> </target> 

更改代码之后,我就可以在运行时随意利用 Kilim 了,只要我在类路径中包含了它的 .jar 文件。

在运行时使用 Kilim

将这两个角色应用到实际中就像在 Java 代码中应用两个普通的 Thread 一样。您使用同一个共享 sharedMailbox 实例创建并扩展两个角色实例,然后调用 start 方法来实际设置它们。

清单 5. 一个简单的程序

import kilim.Mailbox; import kilim.Task; public class CalculationCooperation {   public static void main(String[] args) {   Mailbox<Calculation> sharedMailbox = new Mailbox<Calculation> ();   Task deferred = new DeferredDivision(sharedMailbox);   Task calculator = new Calculator(sharedMailbox);   deffered.start();   calculator.start();   } }

Java开发2.0: Kilim简介(7)

时间:2011-10-22 IBM Andrew Glover

运行这两个角色会得到如清单 6 所示的输出。如果运行此代码,您的输出可能有所不同

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号