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);
답변
Guava 는 Futures.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();