Best way to call future.get() The following is a small part of some code I am working on
Which is better/faster/nicer?

1.

for (Future&lt;Subscription&gt; future : futures) {
      try {
        executorService.submit(new Updater(future.get()));
      } catch (ExecutionException e) {
        logger.error(e, e);
      }
    }


2.

  for (Future&lt;Subscription&gt; future : futures) {
          try {
            executorService.submit(new Updater(future));
          //here future.get() will be called in the Updater constructor in its own thread
          } catch (ExecutionException e) {
            logger.error(e, e);
          }
        }


I am tempted to go with the second way as future.get() is called in its own thread and not in the main thread.
Your presumtion that the future.get() method is called in another thread is wrong. The  constructor still executes in the same thread as the loop, its the run() method in the Updater class that is called in its own thread. Consider passing the whole future to the Updater and store a reference to the future internally. Then, once the value is really required (somewhere after the run method of Updater has been called), you can call get() on the future to retrieve its value.