In 2004 Java 5 was released introducing a load of new features: generics, autoboxing, annotations, and… java.util.concurrent. You could use the exciting new java.util.concurrent.Future class to represent the result of an asynchronous computation, but it did not have any methods to combine these computations withoung blocking to get a result.