Best way to call future.get()
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.