list of dots Digital Research Alliance of Canada logo  NSERC logo  University of Ottawa logo / UniversitĂ© d'Ottawa

User Manual    [Previous]   [Next]   

Concurrency Using Do Activities

Multiple concurrent blocks that become active when in a particular state can be accomplished in Umple using a state machine with two substates separated by the || symbol, each with a do activity. Both do activities will run concurrently.

Example

class X {
  activesm {
    topstate {
      thread1 {
        do {
          System.out.println(
            "Doing the activity - Normally "+
            "this would last a long time");
          Thread.sleep(1000);
          System.out.println("Done thread 1");
        }
      }
      ||
      thread2 {
        do {
          System.out.println(
            "Doing the other activity - Again "+
            "this would last a long time");
          Thread.sleep(3000);
          System.out.println("Done thread 2");
        }
      }
    }
  }
  public static void main(String[] argv) {
    new X();
  }
}

      

Load the above code into UmpleOnline

 

Another Example

// This is a more sophisticated example
class X {
 sm {
   s1 {
     do {
        System.out.println("In S1");
        Thread.sleep(1000);
        System.out.println(
          "Still in S1 after sleep");
        Thread.sleep(2000);
        System.out.println(
          "About to leave S1");
      }
      -> s2;
    }
    s2 {
     do {
        System.out.println("In S2");
        Thread.sleep(1000);
        System.out.println(
          "Still in S2 after sleep");
        Thread.sleep(2000);
        System.out.println(
          "About to leave S2");
      }
      nesteds2a {
        do {
          System.out.println("In S2a");
          Thread.sleep(1000);
          System.out.println(
            "Still in S2a after sleep");
          Thread.sleep(2000);
          System.out.println(
            "About to leave S2a");
        }
      }
      ||
      nesteds2b {
       do {
          System.out.println("In S2b");
          Thread.sleep(1000);
          System.out.println(
            "Still in S2b after sleep");
          Thread.sleep(2000);
          System.out.println(
            "About to leave S2b");
        }
      }
    }
  }
  public static void main(String[] argv) {
    System.out.println("In Main");
    X theX = new X();
    System.out.println("End of Main");
  }
}

      

Load the above code into UmpleOnline