/** * Allows for converting a blocking JDK {@link java.util.concurrent.Future Future} into a * non-blocking future. * * @param <T> The type for the Future * @param future The blocking future * @param executor The executor to use to compute/execute the Future holding the provided function * @return The future that will hold the result provided by the future * @since 1.5 */ public static <T> Future<T> Future(java.util.concurrent.Future<T> future, Executor executor) { return Future.apply(() -> future.get(), executor); }
/** * Allows for easy creation of asynchronous computations that will be executed in the future. <br> * The method relays the execution to {@link Future#apply(ThrowableFunction0)}. <br> * Best used in conjunction with statically importing this method. * * <blockquote> * * <pre> * import static javascalautils.concurrent.FutureCompanion.Future; * * Future<Integer> resultSuccess = Future(() -> 9 / 3, someExecutor); // The Future will at some point contain: Success(3) * Future<Integer> resultFailure = Future(() -> 9 / 0, someExecutor); // The Future will at some point contain: Failure(ArithmeticException) * </pre> * * </blockquote> * * @param <T> The type for the Future * @param function The function to render either the value <i>T</i> or raise an exception. * @param executor The executor to use to compute/execute the Future holding the provided function * @return The future that will hold the result provided by the function * @since 1.4 * @see Future#apply(ThrowableFunction0, Executor) */ public static <T> Future<T> Future(ThrowableFunction0<T> function, Executor executor) { return Future.apply(function, executor); }
/** * Allows for converting a blocking JDK {@link java.util.concurrent.Future Future} into a * non-blocking future. <br> * This will use the default executor to wait/block on the provided future. * * @param <T> The type for the Future * @param future The blocking future * @return The future that will hold the result provided by the future * @since 1.5 */ public static <T> Future<T> Future(java.util.concurrent.Future<T> future) { return Future.apply(() -> future.get()); }
/** * Allows for easy creation of asynchronous computations that will be executed in the future. <br> * The method relays the execution to {@link Future#apply(ThrowableFunction0)}. <br> * Best used in conjunction with statically importing this method. * * <blockquote> * * <pre> * import static javascalautils.concurrent.FutureCompanion.Future; * * Future<Integer> resultSuccess = Future(() -> 9 / 3); // The Future will at some point contain: Success(3) * Future<Integer> resultFailure = Future(() -> 9 / 0); // The Future will at some point contain: Failure(ArithmeticException) * </pre> * * </blockquote> * * @param <T> The type for the Future * @param function The function to render either the value <i>T</i> or raise an exception. * @return The future that will hold the result provided by the function * @since 1.3 * @see Future#apply(ThrowableFunction0) */ public static <T> Future<T> Future(ThrowableFunction0<T> function) { return Future.apply(function); }