code: public List<Future<T>> execute(@SuppressWarnings("unchecked") Task<T> ... tasks) {
  		List<Future<T>> futures = new ArrayList<Future<T>>();
  		if(tasks != null) {
  			synchronized(queue) {
  				int i = 0;
  				for(Task<T> task : tasks) {
  					if(task !=  null) {
  						this.tasks.add(task);
  						TaskCallable<T> callable = new TaskCallable<T>(i++, queue, task);
  						for(TaskObserver<T> observer : observers) {
  							observer.onTaskStarting(task);
  						}
  						futures.add(executor.submit(callable));
  						for(TaskObserver<T> observer : observers) {
  							observer.onTaskStarted(task);
  						}
  					}
  				}
  			}
  		}
  		return futures;
  	}
docs: Starts the given set of tasks asynchronously, returning their futures.
  
  @param tasks
  the set of tasks to execute.
  @return
  the corresponding set of futures.