It depends on the execution context. So you can choose a strategy.
You, the executor, can simply do this in the calling thread, storing the card calls in one thread. You can pass your own strategy by explicitly passing the execution context or using implicit.
First I have to check what the default fork / join pool does by registering which thread was used. Newer versions of Afaik sometimes use a feed thread. However, I do not know if future callbacks were used / applied for scala.
source share