In computer science, future, promise, and delay refer to constructs used for synchronizing in some concurrent programming languages. They describe an object that acts as a proxy for a result that is initially unknown, usually because the computation of its value is yet incomplete.
The interesting part of the story relative to futures and promises is what happen when the value is not available, how blocking is performed and if the context switches thread or not.
To my understanding, in Akka and Play, futures requires a thread waiting for the value to become available, whereas promises trigger yield operations on coroutines / green routines.