主线程等待子线程执行二
2012-09-28 13:43
281 查看
如果要执行的内容很多,但允许开的最大线程数固定,比如20个。要等待所有线程执行完毕后才能继续,可以参考如下代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using CDBDataMultiSync.Model;
using System.Threading;
using System.Threading.Tasks; namespace CDBDataMultiSync.BLL
{
/// <summary>
/// 导入数据管理
/// </summary>
public class ImportDataManager
{ public void MultiImportMessage(List<Message> messageLists)
{
//创建线程等待委托列表
//List<WaitHandle> waitHandles = new List<WaitHandle>();
ThreadPool.SetMaxThreads(20, 20);
int waitThreadCount= 0; int MaxThreadCount= 0;
for (int i = 0; i < messageLists.Count;i++ )
{
//从线程池中获取一个线程来执行任务
ThreadPool.QueueUserWorkItem(new WaitCallback(CreateThreadDoTask), messageLists[i]);
}
//等待所有线程执行完毕
while(true)
{
ThreadPool.GetAvailableThreads(out wth,out mth);
if(waitThreadCount-MaxThreadCount==0)
{
Console.WriteLine("空闲线程数{0},最大线程数{1}", wth, mth);
Console.WriteLine("全部执行完毕");
break;
}
} } public void CreateThreadDoTask(object msgObject)
{
Message msg = (Message)msgObject;
ImportOneMessage(msg);
} /// <summary>
/// 多线程导入
/// </summary>
/// <param name="messageLists"></param>
public void ImportOneMessage(Message msg)
{
Console.WriteLine("正在执行" + msg.BussinessName); int wth = 0; int mth = 0;
ThreadPool.GetAvailableThreads(out wth, out mth);
Console.WriteLine("空闲线程数{0},最大线程数{1}", wth, mth); Thread.Sleep(3000);
Console.WriteLine("执行完毕=====" + msg.BussinessName);
Console.WriteLine("空闲线程数{0},最大线程数{1}", wth, mth);
} }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using CDBDataMultiSync.Model;
using System.Threading;
using System.Threading.Tasks; namespace CDBDataMultiSync.BLL
{
/// <summary>
/// 导入数据管理
/// </summary>
public class ImportDataManager
{ public void MultiImportMessage(List<Message> messageLists)
{
//创建线程等待委托列表
//List<WaitHandle> waitHandles = new List<WaitHandle>();
ThreadPool.SetMaxThreads(20, 20);
int waitThreadCount= 0; int MaxThreadCount= 0;
for (int i = 0; i < messageLists.Count;i++ )
{
//从线程池中获取一个线程来执行任务
ThreadPool.QueueUserWorkItem(new WaitCallback(CreateThreadDoTask), messageLists[i]);
}
//等待所有线程执行完毕
while(true)
{
ThreadPool.GetAvailableThreads(out wth,out mth);
if(waitThreadCount-MaxThreadCount==0)
{
Console.WriteLine("空闲线程数{0},最大线程数{1}", wth, mth);
Console.WriteLine("全部执行完毕");
break;
}
} } public void CreateThreadDoTask(object msgObject)
{
Message msg = (Message)msgObject;
ImportOneMessage(msg);
} /// <summary>
/// 多线程导入
/// </summary>
/// <param name="messageLists"></param>
public void ImportOneMessage(Message msg)
{
Console.WriteLine("正在执行" + msg.BussinessName); int wth = 0; int mth = 0;
ThreadPool.GetAvailableThreads(out wth, out mth);
Console.WriteLine("空闲线程数{0},最大线程数{1}", wth, mth); Thread.Sleep(3000);
Console.WriteLine("执行完毕=====" + msg.BussinessName);
Console.WriteLine("空闲线程数{0},最大线程数{1}", wth, mth);
} }
}
相关文章推荐
- python多线程(等待)主线程和子线程的同步执行
- java线程池主线程等待子线程执行完成
- java线程池主线程等待子线程执行完成后再继续处理后面工作
- java线程池主线程等待子线程执行完成后再继续处理后面工作
- 主线程等待子线程执行结束后再执行的实现方式
- ExecutorService java线程池主线程等待子线程执行完成
- Java 主线程等待子线程执行完再执行
- Java线程池主线程等待子线程执行完成
- 主线程等待子线程执行完毕后再执行
- java线程池主线程等待子线程执行完成后再继续处理后面工作
- 子线程返回前,使循环暂停但不使主线程卡死的办法,等待子线程有返回了之后,才执行主线程下一步代码的方法
- WinForm程序如何等待多个线程执行完后提示用户?
- 主线程等待所有子线程执行完成之后再继续往下执行的解决方案
- 主线程等待几个子线程执行完成方案
- 线程创建,属性设置与获得,等待线程结束,线程中fork,以及执行exec()
- java主线程等待所有子线程执行完毕在执行(常见面试题)
- 并发问题和主线程等待所有子线程运行完毕再执行
- 主线程等待所有子线程执行完毕后再继续的问题
- java 多线程 主线程等待子线程结束
- delphi 中使用WaitForMultipleObjects等待线程执行,再执行后续代码