Каждая фьюча в каждый момент времени находится либо в завершённом, либо в незавершённом состоянии.
Если состояние завершённое, прямо в момент вызова будет вызван context.execute с Runnable содержащим код, который вы передали.
Если ещё незавершённое, ваш колбек ляжет в список колбеков в самой фьюче и в момент завершения, в коде, который вызовет complete у соотв. промиса, будут вызваны context.execute с Runnable, сортветствующими каждому из колбеков