CompletableFuture with delay
David Holmes
david.holmes at oracle.com
Mon Aug 25 02:26:18 UTC 2014
Hi Sebastian,
lambda-dev has never been the place to discuss java.util.concurrent
classes. Such discussion is best done on Doug Lea's
concurrency-interest at cs.oswego.edu list.
Cheers,
David Holmes
On 25/08/2014 4:21 AM, Millies, Sebastian wrote:
> Hello there,
>
> I'd like to simulate asynchronous IO events in a test system (without actual IO).
> For this purpose, I have defined a method that creates a future which returns a value after a delay.
> In contrast to Future#get(Long,TimeUnit) this method does not wait, but uses a separate ScheduledFuture
> to complete the future. Code is shown below.
>
> So far, so good. But I also want to cancel the scheduled task (the ScheduledFuture returned from
> ScheduledExecutorService#schedule()) when the future is cancelled before the timeout. (So that
> I can keep my timeout tasks from piling up when timeouts are long in relation to the real
> computations.)
>
> Please look at the code below, where I create an additional future with whenComplete and use
> that to cancel the task. Is that a correct solution? Or could this additional future be optimized
> away or be garbage collected? Does the variable "future" that is returned from the method hold a
> reference to the additional future? I couldn't tell from the source code of CompletableFuture.
>
> private static final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(TIMER_THREADS);
>
> public static <T> CompletableFuture<T> delayedSuccess(T value, int delay, TimeUnit unit) {
> CompletableFuture<T> future = new CompletableFuture<T>();
> ScheduledFuture<Boolean> task = scheduler.schedule(() -> future.complete(value), delay, unit);
> future.whenComplete((t, ex) -> {
> if (future.isCancelled())
> task.cancel(true); // <== HERE
> });
> return future;
> }
>
> I fear that this might no longer be the place to ask such questions. If so, could you point
> me to an appropriate forum, where I would also be likely to receive an answer?
>
> Sebastian Millies
> Expert Java Business Analytics
> Phone: +49 681 210 3221 | Fax: +49 681 210 1801 | Sebastian.Millies at softwareag.com<mailto:Sebastian.Millies at ids-scheer.com>
>
>
>
> Software AG – Sitz/Registered office: Uhlandstraße 12, 64297 Darmstadt, Germany – Registergericht/Commercial register: Darmstadt HRB 1562 - Vorstand/Management Board: Karl-Heinz Streibich (Vorsitzender/Chairman), Dr. Wolfram Jost, Arnd Zinnhardt; - Aufsichtsratsvorsitzender/Chairman of the Supervisory Board: Dr. Andreas Bereczky - http://www.softwareag.com
>
>
More information about the lambda-dev
mailing list