code: public Collection<Future<?>> startWorking(WorkQueue queue, boolean background)
  	 {
  		 ArrayList<Future<?>> futures = new ArrayList<Future<?>>(queue.size());
  		 
  		    while(queue.hasMoreTasks())
  		    {
  		    	
  		    	futures.add(executor.submit(queue.nextTask()));
  			}
  		    
  		    if(background)
  		    	return futures;
  		    
  		    try
  			{
  				for (Future<?> future : futures)
  				{
  					future.get(); //join submitted thread
  					
  				}
  				return futures;
  			}
  			catch (InterruptedException e)
  			{
  				throw new SystemException(e);
  			}
  			catch (ExecutionException e)
  			{
  				throw new SystemException(e);
  			}
  		    
     }
docs: The start the work threads
  @param queue the queue
  @param background determine to while for futures to complete
  @return the collection of futures