asp.net多线程,如何判断所有子线程都已经运行完毕

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了asp.net多线程,如何判断所有子线程都已经运行完毕相关的知识,希望对你有一定的参考价值。

如何判断所有子线程都已经运行完毕,有例子发下.....

在子线程开始时设置公共信号量boolean flag = flase;
如果子线程借书则让flag = true,这就你就只要对flag进行判断就好了 如果为false则未结束,若为true则运行完毕
参考技术A List<Thread> ThreadList = new List<Thread>();

每当有个新的线程出现
Thread a =new Thread(aa);
a.start();
ThreadList .add(a);//保存起来

判断线程是否结束
List<Thread> List2Remove = new List<Thread>();

while(ThreadList.count>0)
foreach(Thread a in ThreadList)
if(a.IsAlive==false) List2Remove.add(a);


foreach(Thread a in List2Remove)
if(a.IsAlive==false) ThreadList.Remove(a);


//所有线程都结束的话,list长度是0,跳出

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

在使用多线程执行任务的时候,在某些场景下需要判断线程池中所有线程是否都已执行完毕,例如:我有个方法的功能是往一个文件异步地写入内容,我需要在所有的子线程写入完毕后在文件末尾写“---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()方法都会阻塞,

以上是关于asp.net多线程,如何判断所有子线程都已经运行完毕的主要内容,如果未能解决你的问题,请参考以下文章

多线程 - CountDownLatch总结

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

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

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

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

python 多线程状态