public void perform(List<Action<Void>> actions,long timeBoundInMillis){
  List<TimeBoundedThread<Void>> tasks=createTimeBoundedThreads(actions);
  try {
    _executerService.invokeAll(tasks,timeBoundInMillis,TimeUnit.MILLISECONDS);
  }
 catch (  Throwable thrown) {
    _logger.error(String.format("Got unexpected error while performing the following actions: %s",actions),thrown);
  }
}

public void perform ( List < Action < Void > > actions , long timeBoundInMillis ) { List < TimeBoundedThread < Void > > tasks = createTimeBoundedThreads ( actions ) ; try { _executerService . invokeAll ( tasks , timeBoundInMillis , TimeUnit . MILLISECONDS ) ; } catch ( Throwable thrown ) { _logger . error ( String . format ( "Got unexpected error while performing the following actions: %s" , actions ) , thrown ) ; } }
executes the given actions in parallel , returns when all actions are completed or until the given timeout elapses .
