如何判断线程池中的线程是否全部执行完毕

Posted 李晓LOVE向阳

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何判断线程池中的线程是否全部执行完毕相关的知识,希望对你有一定的参考价值。

在使用多线程执行任务的时候,在某些场景下需要判断线程池中所有线程是否都已执行完毕,例如:我有个方法的功能是往一个文件异步地写入内容,我需要在所有的子线程写入完毕后在文件末尾写“---END---”及关闭文件流等,这个时候我就需要某个标志位可以告诉我是否线程池中所有的子线程都已经执行完毕。下面我总结了两种方式来判断。

第一种方式:使用Semaphore

Semaphore简介:

Semaphore,是JDK1.5的java.util.concurrent并发包中提供的一个并发工具类。

所谓Semaphore即 信号量 的意思。

这个叫法并不能很好地表示它的作用,更形象的说法应该是许可证管理器。

其作用在JDK注释中是这样描述的:

A counting semaphore. 
Conceptually, a semaphore maintains a set of permits. 
Each @link #acquire blocks if necessary until a permit is available, and then takes it. 
Each @link #release adds a permit, potentially releasing a blocking acquirer. 
However, no actual permit objects are used; the @code Semaphore just keeps a count of the number available and acts accordingly.

翻译过来,就是:

Semaphore是一个计数信号量。
从概念上将,Semaphore包含一组许可证。
如果有需要的话,每个acquire()方法都会阻塞,

以上是关于如何判断线程池中的线程是否全部执行完毕的主要内容,如果未能解决你的问题,请参考以下文章

如何判断线程池中的线程是否全部执行完毕

判断线程池中的线程是否全部执行完毕

Java并发计算判断线程池中的线程是否全部执行完毕

线程池判断是不是执行完毕

C# 如何让线程等待到执行完毕才执行下一个循环

C#多线程: 怎么知道 多个线程 执行完毕了?所有的线程执行完毕后 我要做处理