106 votes

Comment créer un futur complet en java

Quelle est la meilleure façon de construire un futur complet en Java ? J'ai implémenté mon propre CompletedFuture ci-dessous, mais j'espérais que quelque chose de ce genre existe déjà.

public class CompletedFuture<T> implements Future<T> {
    private final T result;

    public CompletedFuture(final T result) {
        this.result = result;
    }

    @Override
    public boolean cancel(final boolean b) {
        return false;
    }

    @Override
    public boolean isCancelled() {
        return false;
    }

    @Override
    public boolean isDone() {
        return true;
    }

    @Override
    public T get() throws InterruptedException, ExecutionException {
        return this.result;
    }

    @Override
    public T get(final long l, final TimeUnit timeUnit) throws InterruptedException, ExecutionException, TimeoutException {
        return get();
    }
}

227voto

Andrejs Points 4235

En Java 8, vous pouvez utiliser le CompletableFuture intégré :

 Future future = CompletableFuture.completedFuture(value);

70voto

hoaz Points 3618

Apache Commons Lang définit une implémentation similaire qui s'appelle ConstantFuture, vous pouvez l'obtenir en appelant :

Future<T> future = ConcurrentUtils.constantFuture(T myValue);

43voto

Louis Wasserman Points 67557

Goyave définit Futures.immediateFuture(value) qui fait l'affaire.

4voto

Dave Points 2958
FutureTask<String> ft = new FutureTask<>(() -> "foo");
ft.run();

System.out.println(ft.get());

imprimera "foo" ;

Vous pouvez également avoir un Future qui lève une exception lorsque get() est appelé :

FutureTask<String> ft = new FutureTask<>(() -> {throw new RuntimeException("exception!");});
ft.run();

-3voto

Alex Worden Points 1099

J'ai trouvé une classe très similaire à la vôtre dans le Java rt.jar

com.sun.xml.internal.ws.util.CompletedFuture

Il vous permet également de spécifier une exception qui peut être levée lorsque get() est invoqué. Mettez simplement la valeur null si vous ne voulez pas lancer d'exception.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X