Comment créer un formulaire de futur en java

Quelle est la meilleure façon de construire un formulaire de futur en Java? J'ai mis en œuvre mes propres CompletedFuture ci-dessous, mais espérais quelque chose comme ce qui 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();
    }
}
  • La meilleure façon de ne pas en créer un! 😉 Pourquoi avez-vous besoin pour mettre en œuvre un Avenir? Ne pouvez-vous pas utiliser les objets de retour d'un avenir à la place?
  • Je soupçonne n'en existe aucun, parce que je n'ai jamais vu une raison d'en avoir un. Peut-être que vous pourriez nous expliquer ce que vous essayez de faire?
  • Je suppose qu'il en a besoin pour certaines API que pour certains tordus raison veut travailler avec des contrats à terme, même si il a vraiment que les besoins de ses valeurs. Ou il en a besoin pour se moquant. Au moins, c'est les seules raisons que je peux imaginer.
  • Les tests unitaires serait une très bonne raison de vouloir -- un moqué de service de retour d'un avenir avec des valeurs de test.
  • Que diriez-vous si vous aviez une méthode qui accepte un Callable<T>, et qui peut ou ne peut pas exécuter le travail de manière asynchrone tributaire de la disponibilité des ressources ou à d'autres facteurs, tels que les options qui a déjà été fourni de façon plus tôt? Imaginez si Exécuteur testamentaire.execute(Runnable) a pris un Callable<T> comme paramètre à la place et a décidé de l'exécuter dans le thread qui s'exécute, ne serait pas la mise en œuvre devez créer son propre Avenir<T> alors?
  • J'ai le même besoin et peut expliquer... Le code que j'ai écris attend une liste de contrats à Terme représentant les résultats des requêtes qui sont tous évidemment exécutées simultanément. Cependant, dans chaque cas, le résultat de la requête peut être mis en cache, et quand il l'est, mon code renvoie une CompletedFuture du résultat mis en cache. Cela donne un propre de l'abstraction et de la séparation des préoccupations.

InformationsquelleAutor Jake Walsh | 2012-12-13