温馨提示×

JavaFutureTask与线程池如何配合

小樊
81
2024-11-19 13:43:44
栏目: 编程语言

JavaFutureTask和线程池(ExecutorService)可以很好地配合使用,以提高程序的性能和响应能力。JavaFutureTask是一个实现了RunnableFuture接口的任务类,它可以用于异步执行任务并获取任务执行结果。线程池则是一个用于管理多个线程的容器,可以有效地复用线程资源,提高系统性能。

下面是一个简单的示例,展示了如何使用JavaFutureTask和线程池配合:

import java.util.concurrent.*;

public class JavaFutureTaskWithThreadPool {
    public static void main(String[] args) {
        // 创建一个固定大小的线程池
        ExecutorService executorService = Executors.newFixedThreadPool(4);

        // 创建一个JavaFutureTask实例
        JavaFutureTask<String> futureTask = new JavaFutureTask<>(() -> {
            // 模拟一个耗时任务
            Thread.sleep(3000);
            return "任务执行结果";
        });

        // 将JavaFutureTask提交给线程池执行
        executorService.submit(futureTask);

        try {
            // 获取任务执行结果,如果任务尚未完成,这里会阻塞等待
            String result = futureTask.get();
            System.out.println("任务执行结果: " + result);
        } catch (InterruptedException | ExecutionException e) {
            e.printStackTrace();
        }

        // 关闭线程池
        executorService.shutdown();
    }
}

在这个示例中,我们创建了一个固定大小为4的线程池,然后创建了一个JavaFutureTask实例,将一个耗时任务提交给线程池执行。通过调用futureTask.get()方法,我们可以阻塞等待任务执行完成并获取任务执行结果。最后,记得关闭线程池以释放资源。

0