@Override
  public void addParallel(List<ExecutionFlow> threads) {
    if (threads.size() >= 2) {
      String forkActivityId = popCurrentId();
      String joinActivityId = "join-" + popCurrentId();

      // split executions with fork
      String[] flowIds =
          splitExecution(
              forkActivityId, behaviorFactory.forkBehaviorInstance(), threads.size(), null);
      addFlows(flowIds, threads, joinActivityId);

      // add join
      builder
          .createActivity(joinActivityId)
          .behavior(behaviorFactory.joinBehaviorInstance())
          .transition(genNextActivityId())
          .endActivity();
    } else if (threads.size() == 1) {
      addFlow(threads.get(0));
    }
  }