线程池如何知道一个线程的任务已经执行完成

线程池可以通过 Future 或回调函数来跟踪任务的完成情况。Future 是执行异步任务的结果的代表,它允许你在任务完成后获取结果或异常,也可以用来判断任务是否已经完成。

下面是一个使用 ExecutorServiceFuture 来追踪任务执行完成的代码示例:

使用 ExecutorServiceFuture 示例

import java.util.concurrent.*;

public class ThreadPoolExample {

    public static void main(String[] args) throws InterruptedException, ExecutionException {

        // 创建线程池
        ExecutorService executorService = Executors.newFixedThreadPool(3);

        // 提交任务并返回Future对象
        Future<Integer> future = executorService.submit(new Callable<Integer>() {
            @Override
            public Integer call() throws Exception {
                // 模拟任务执行
                System.out.println("Task started.");
                Thread.sleep(2000);  // 模拟任务执行时间
                System.out.println("Task completed.");
                return 42;  // 任务返回结果
            }
        });

        // 等待任务执行完成并获取结果
        Integer result = future.get();  // 如果任务完成,get() 会返回结果,否则阻塞直到完成

        System.out.println("Task result: " + result);

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

解释

  1. 使用 Executors.newFixedThreadPool(3) 创建一个固定大小为 3 的线程池。
  2. 使用 submit() 提交一个任务,任务类型为 Callable<Integer>,它会返回一个 Integer 类型的结果。
  3. future.get() 会阻塞当前线程,直到任务完成并返回结果。这个方法还可以用来获取任务执行过程中抛出的异常。
  4. 完成后,打印任务的执行结果。

通过 Future 对象,线程池可以管理任务的执行状态,并在任务完成后返回结果或异常。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

昔我往昔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值