0
点赞
收藏
分享

微信扫一扫

Java异步工具类-获得结果&捕获异常

一、工具类编写

import java.util.concurrent.*;
 
public class AsyncUtils {
 
    private static final ExecutorService executorService = Executors.newFixedThreadPool(10);
 
    /**
     * 异步执行任务并返回Future对象
     * @param task 实现Callable接口的任务
     * @param <V> 任务返回类型
     * @return 代表任务进度的Future对象
     */
    public static <V> Future<V> executeAsync(Callable<V> task) {
        return executorService.submit(task);
    }
 
    /**
     * 获取异步任务的结果,如果任务未完成则等待指定时间
     * @param future 异步任务的Future对象
     * @param timeout 超时时间
     * @param unit 时间单位
     * @param <V> 任务返回类型
     * @return 任务返回的结果,如果任务在指定时间内未完成则返回null
     */
    public static <V> V getAsyncResult(Future<V> future, long timeout, TimeUnit unit) {
        try {
            return future.get(timeout, unit);
        } catch (InterruptedException | ExecutionException | TimeoutException e) {
            // 异常处理逻辑
            e.printStackTrace(); // 仅打印异常,实际应用中应根据需要处理异常
            return null;
        }
    }
}

二、调用

public class AsyncExample {
    public static void main(String[] args) {
        Callable<String> task = () -> {
            // 模拟耗时操作
            Thread.sleep(2000);
            return "任务完成";
        };
 
        Future<String> future = AsyncUtils.executeAsync(task);
        String result = AsyncUtils.getAsyncResult(future, 3, TimeUnit.SECONDS);
 
        if (result != null) {
            System.out.println("异步任务结果: " + result);
        } else {
            System.out.println("未能获取到任务结果");
        }
    }
}

三、说明

在这个示例中,我们定义了一个异步工具类AsyncUtils,它提供了执行异步任务的executeAsync方法和获取异步结果的getAsyncResult方法。getAsyncResult方法使用了Future.get方法并捕获了可能出现的异常,并在异常发生时进行了简单的处理(例如打印堆栈跟踪)。使用Executors.newFixedThreadPool创建了一个固定大小的线程池用于异步任务的执行。


举报

相关推荐

0 条评论