Подтвердить что ты не робот

Как создать завершенное будущее в java

Каков наилучший способ построения завершенного будущего на Java? Я выполнил свой собственный CompletedFuture ниже, но надеялся, что что-то подобное уже существует.

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();
    }
}
4b9b3361

Ответ 1

Apache Commons Lang определяет аналогичную реализацию, которая называется ConstantFuture, вы можете получить ее, вызвав:

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

Ответ 2

В Java 8 вы можете использовать встроенный файл CompletableFuture:

 Future future = CompletableFuture.completedFuture(value);

Ответ 4

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

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

выведет "foo";

У вас также может быть Future, который выдает исключение при вызове get():

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

Ответ 5

Я нашел очень похожий класс для вашего в Java rt.jar

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

Он также позволяет указать исключение, которое может быть выбрано при вызове метода get(). Просто установите значение null, если вы не хотите генерировать исключение.

Ответ 6

В Java 6 вы можете использовать следующее:

Promise<T> p = new Promise<T>();
p.resolve(value);
return p.getFuture();