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



답변

Apache Commons Lang은 ConstantFuture라는 유사한 구현을 정의합니다. 다음을 호출하여 가져올 수 있습니다.

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


답변

Java 8에서는 내장 CompletableFuture를 사용할 수 있습니다.

 Future future = CompletableFuture.completedFuture(value);


답변

GuavaFutures.immediateFuture(value)작업을 수행하는을 정의합니다 .


답변

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

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

“foo”를 출력합니다.

get ()이 호출 될 때 예외를 발생시키는 Future를 가질 수도 있습니다.

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


답변

Java rt.jar에서 귀하와 매우 유사한 클래스를 찾았습니다.

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

또한 get ()이 호출 될 때 발생할 수있는 예외를 지정할 수 있습니다. 예외를 throw하지 않으려면 null로 설정하십시오.


답변

Java 6에서는 다음을 사용할 수 있습니다.

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


답변