[concurrency-interest] Reusing CompletableFuture

Pavel Rappo pavel.rappo at gmail.com
Sun Jul 24 08:57:48 EDT 2016


Is it generally safe to reuse an instance of CompletableFuture? Or am I risking
with memory leaks due to dependants build up?

Say, I have a method that returns a CF. In some cases it may return a CF
straight away indicating that the action has been already done. Should I always
create a new completed CF, or can I reuse a pre-cached one?

There's a comment in the class itself, but I'm not sure I understand it enough
to make a conclusion:

     * ...Without precautions, CompletableFutures would be prone to
     * garbage accumulation as chains of Completions build up, each
     * pointing back to its sources. So we null out fields as soon as
     * possible.  The screening checks needed anyway harmlessly ignore
     * null arguments that may have been obtained during races with
     * threads nulling out fields.  We also try to unlink non-isLive
     * (fired or cancelled) Completions from stacks that might
     * otherwise never be popped: Method cleanStack always unlinks non
     * isLive completions from the head of stack; others may
     * occasionally remain if racing with other cancellations or
     * removals...


More information about the Concurrency-interest mailing list