¿Cómo usar ExecutorService de la programación concurrente de Java?

Iam usando el código a continuación para cargar imágenes en el servidor remoto. Cuando uso a continuación, está cargando todas las imágenes simultáneamente en el servidor remoto.

List<Future<String>> futureList = new ArrayList<Future<String>>();
ExecutorService execService = Executors.newFixedThreadPool(Images.size());
for (IImage image : Images) { 
  try {
    //execService.execute(lServerRequest.new uploadImages(image.getDataPath(),image.getDisplayName()));
    singleFuture = execService.submit(lServerRequest.new uploadImages(image.getDataPath(),image.getDisplayName()));
    //Log.d("","singleFuture -------"+singleFuture.get());
    futureList.add(singleFuture);
    Log.d("","futureList Size:"+futureList.size());
  } catch(Exception e){
    execService.shutdown();
  }

Cuando utilicé el siguiente código

   singleFuture = execService.submit(lServerRequest.new uploadImages(image.getDataPath(),image.getDisplayName()));
//Log.d("","singleFuture -------"+singleFuture.get());
    futureList.add(singleFuture);

agrega todos los objetos futuros a la lista futura que regresa inmediatamente de ejecutable (no espera en ejecutable hasta que se completa la carga de todas las imágenes (el proceso de carga en segundo plano continúa)

Pero cada vez que descomente debajo de la línea en el código anterior, después de cargar con éxito cada imagen, vuelve de ejecutar.

singleFuture = execService.submit(lServerRequest.new uploadImages(image.getDataPath(),image.getDisplayName()));
Log.d("","singleFuture -------"+singleFuture.get());
futureList.add(singleFuture);

¿Hay algo mal en mi código y está bien tomar la conexión remota del servidor más a la vez o hay alguna carga en el servidor? ¿Cómo cargar las imágenes mediante la programación simultánea de Jav

Hacer elsubmit() yexecute() funciones tienen el mismo efecto?

Respuestas a la pregunta(2)

Su respuesta a la pregunta