面试高手:线程池如何识别线程任务完成状态?

2026-05-19 21:570阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1154个文字,预计阅读时间需要5分钟。

面试高手:线程池如何识别线程任务完成状态?

一位年轻人私下了解了一个小米的面试题,问题是:线程池如何知道一个线程的任务已经执行完成?直言不讳地说,这个问题确实很棘手,很多工作五六年甚至更久的小伙子,连线程池都用过。

一个小伙伴私信了一个小米的面试题,问题是: “线程池如何知道一个线程的任务已经执行完成”?

说实话,这个问题确实很刁钻,毕竟像很多工作5年多的小伙伴,连线程池都没用过,怎么可能回答出来这个问题呢?

下面我们来看看普通人和高手遇到这个问题的回答思路。

普通人:

嗯..

高手:

好的,我会从两个方面来回答。

  1. 在线程池内部,当我们把一个任务丢给线程池去执行,线程池会调度工作线程来执行这个任务的run方法,run方法正常结束,也就意味着任务完成了。

    所以线程池中的工作线程是通过同步调用任务的run()方法并且等待run方法返回后,再去统计任务的完成数量。

  2. 如果想在线程池外部去获得线程池内部任务的执行状态,有几种方法可以实现。

    1. 线程池提供了一个isTerminated()方法,可以判断线程池的运行状态,我们可以循环判断isTerminated()方法的返回结果来了解线程池的运行状态,一旦线程池的运行状态是Terminated,意味着线程池中的所有任务都已经执行完了。想要通过这个方法获取状态的前提是,程序中主动调用了线程池的shutdown()方法。在实际业务中,一般不会主动去关闭线程池,因此这个方法在实用性和灵活性方面都不是很好。

阅读全文

本文共计1154个文字,预计阅读时间需要5分钟。

面试高手:线程池如何识别线程任务完成状态?

一位年轻人私下了解了一个小米的面试题,问题是:线程池如何知道一个线程的任务已经执行完成?直言不讳地说,这个问题确实很棘手,很多工作五六年甚至更久的小伙子,连线程池都用过。

一个小伙伴私信了一个小米的面试题,问题是: “线程池如何知道一个线程的任务已经执行完成”?

说实话,这个问题确实很刁钻,毕竟像很多工作5年多的小伙伴,连线程池都没用过,怎么可能回答出来这个问题呢?

下面我们来看看普通人和高手遇到这个问题的回答思路。

普通人:

嗯..

高手:

好的,我会从两个方面来回答。

  1. 在线程池内部,当我们把一个任务丢给线程池去执行,线程池会调度工作线程来执行这个任务的run方法,run方法正常结束,也就意味着任务完成了。

    所以线程池中的工作线程是通过同步调用任务的run()方法并且等待run方法返回后,再去统计任务的完成数量。

  2. 如果想在线程池外部去获得线程池内部任务的执行状态,有几种方法可以实现。

    1. 线程池提供了一个isTerminated()方法,可以判断线程池的运行状态,我们可以循环判断isTerminated()方法的返回结果来了解线程池的运行状态,一旦线程池的运行状态是Terminated,意味着线程池中的所有任务都已经执行完了。想要通过这个方法获取状态的前提是,程序中主动调用了线程池的shutdown()方法。在实际业务中,一般不会主动去关闭线程池,因此这个方法在实用性和灵活性方面都不是很好。

阅读全文