面试高手:线程池如何识别线程任务完成状态?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1154个文字,预计阅读时间需要5分钟。
一位年轻人私下了解了一个小米的面试题,问题是:线程池如何知道一个线程的任务已经执行完成?直言不讳地说,这个问题确实很棘手,很多工作五六年甚至更久的小伙子,连线程池都用过。
普通人:一个小伙伴私信了一个小米的面试题,问题是: “线程池如何知道一个线程的任务已经执行完成”?
说实话,这个问题确实很刁钻,毕竟像很多工作5年多的小伙伴,连线程池都没用过,怎么可能回答出来这个问题呢?
下面我们来看看普通人和高手遇到这个问题的回答思路。
嗯..
高手:好的,我会从两个方面来回答。
-
在线程池内部,当我们把一个任务丢给线程池去执行,线程池会调度工作线程来执行这个任务的run方法,run方法正常结束,也就意味着任务完成了。
所以线程池中的工作线程是通过同步调用任务的
run()方法并且等待run方法返回后,再去统计任务的完成数量。 -
如果想在线程池外部去获得线程池内部任务的执行状态,有几种方法可以实现。
-
线程池提供了一个
isTerminated()方法,可以判断线程池的运行状态,我们可以循环判断isTerminated()方法的返回结果来了解线程池的运行状态,一旦线程池的运行状态是Terminated,意味着线程池中的所有任务都已经执行完了。想要通过这个方法获取状态的前提是,程序中主动调用了线程池的shutdown()方法。在实际业务中,一般不会主动去关闭线程池,因此这个方法在实用性和灵活性方面都不是很好。
-
本文共计1154个文字,预计阅读时间需要5分钟。
一位年轻人私下了解了一个小米的面试题,问题是:线程池如何知道一个线程的任务已经执行完成?直言不讳地说,这个问题确实很棘手,很多工作五六年甚至更久的小伙子,连线程池都用过。
普通人:一个小伙伴私信了一个小米的面试题,问题是: “线程池如何知道一个线程的任务已经执行完成”?
说实话,这个问题确实很刁钻,毕竟像很多工作5年多的小伙伴,连线程池都没用过,怎么可能回答出来这个问题呢?
下面我们来看看普通人和高手遇到这个问题的回答思路。
嗯..
高手:好的,我会从两个方面来回答。
-
在线程池内部,当我们把一个任务丢给线程池去执行,线程池会调度工作线程来执行这个任务的run方法,run方法正常结束,也就意味着任务完成了。
所以线程池中的工作线程是通过同步调用任务的
run()方法并且等待run方法返回后,再去统计任务的完成数量。 -
如果想在线程池外部去获得线程池内部任务的执行状态,有几种方法可以实现。
-
线程池提供了一个
isTerminated()方法,可以判断线程池的运行状态,我们可以循环判断isTerminated()方法的返回结果来了解线程池的运行状态,一旦线程池的运行状态是Terminated,意味着线程池中的所有任务都已经执行完了。想要通过这个方法获取状态的前提是,程序中主动调用了线程池的shutdown()方法。在实际业务中,一般不会主动去关闭线程池,因此这个方法在实用性和灵活性方面都不是很好。
-

