WEB开发网
开发学院软件开发Java Java 开发 2.0: Kilim 简介 阅读

Java 开发 2.0: Kilim 简介

 2010-05-21 00:00:00 来源:WEB开发网   
核心提示: 从清单 2 可以看到,DeferredDivision 类扩展了 Kilim 的 Task 类型,Java 开发 2.0: Kilim 简介(6),后者实际上模仿了角色模型,注意,它们需要共享一个实例,相应地,该类还改写了 Task 的 execute 方法,后者默认情况下抛出 Pausable

从清单 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 实例),它将该值打印到控制台。

Calculator

Mailbox 的另一端是 Calculator。与清单 2 中定义的 DeferredDivision 角色类似,Calculator 也扩展了 Kilim 的 Task 并实现了 execute 方法。一定要注意两个角色都共享同一个 Mailbox 实例。它们不能与不同的 Mailbox 通信,它们需要共享一个实例。相应地,两个角色都通过它们的构造函数接受一个有类型 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); 
 } 
 } 
} 

上一页  1 2 3 4 5 6 7 8  下一页

Tags:Java 开发 Kilim

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接