/examples/kilim/examples/Chain.java
http://github.com/kilim/kilim · Java · 57 lines · 33 code · 5 blank · 19 comment · 5 complexity · efe523516c82e0c334820e00e05c18b8 MD5 · raw file
- /* Copyright (c) 2006, Sriram Srinivasan
- *
- * You may distribute this software under the terms of the license
- * specified in the file "License"
- */
- package kilim.examples;
- import kilim.*;
- /**
- * Set up a chain of tasks. Each task knows about its mailbox and
- * that of the next in the chain, but is not given the other tasks
- * ref.
- * The main thread pushes an empty StringBuffer into the first task's
- * mailbox, which writes "hello" into the buffer and passes the
- * modified StringBuffer on to the next task, and so on. The last
- * task appends "world", prints it out and exits.
- *
- * [compile] javac -d ./classes Chain.java
- * [weave] java kilim.tools.Weave -d ./wclasses kilim.examples.Chain
- * [run] java -cp ./wclasses:./classes:$CLASSPATH kilim.examples.Chain
- * @author ram
- */
- public class Chain extends Task {
- Mailbox<StringBuffer> mymb, nextmb;
- public Chain(Mailbox<StringBuffer> mb, Mailbox<StringBuffer> next) {
- mymb = mb;
- nextmb = next;
- }
-
- public void execute() throws Pausable{
- while(true) {
- StringBuffer sb = mymb.get();
- if (nextmb == null) {
- System.out.print(sb);
- System.out.println("world");
- System.exit(0);
- } else {
- sb.append("hello ");
- nextmb.put(sb);
- }
- }
- }
- public static void main(String args[]) {
- int n = args.length == 0 ? 10 : Integer.parseInt(args[0]);
- Mailbox<StringBuffer> mb = new Mailbox<StringBuffer>();
- Mailbox<StringBuffer> nextms = null;
- for (int i = 0; i < n; i++) {
- new Chain(mb, nextms).start();
- nextms = mb;
- mb = new Mailbox<StringBuffer>();
- }
- nextms.putnb(new StringBuffer());
- }
- }