您的位置:首页 > 其它

多线程学习之限制同时运行的线程数量

2013-05-14 15:43 295 查看
最近闲暇之余,来搞搞,多线程学习,只为下个项目做准备,随着项目优化,开发,性能的考虑,慢慢要用到些以前不用的东西,先开始熟悉熟悉

先把东西放上来,欢迎大家赐教,比较好久木玩这东西了,肯定不完善,希望大家提出宝贵意见啊(嘿嘿~~)

大概功能描述:为了提高数据处理速度,把任务队列分别交给不同子线程去完成,同时对启动的新线程数量限制,避免线程数量过多照成机器卡壳

using System;
using System.Threading;
namespace ThreadTest
{
class ThreadMaxNum
{
static int NowThCount = 0;//当前已启动线程数量
static int MaxThCount = 5;//允许最大启动线程数量
static int RunNum = 15;//当前有多少个要处理的程序[任务队列]
public static void Run()
{
Thread NewTh;
while (true)
{
//当前没有活动线程,且 任务队列 为空 说明任务完成了
if (NowThCount == 0 && RunNum == 0)
break;

//任务队列为空 ,但是又线程运行中,就让主线程休息 下,在判断
if (RunNum == 0 && NowThCount != 0)
{
Thread.Sleep(2000);//休息
continue;//再次判断
}

//如果 当前活动线程数量 达到最大线程 就不在 开始新的任务
if (NowThCount >= MaxThCount)
{
Thread.Sleep(2000);//休息
continue;//再次判断
}

//有 队列>0,且没有达到最大
if (RunNum > 0 && NowThCount < MaxThCount)
{
//一个任务已经去执行了,应该减掉个,执行结果如何,这里不判断
RunNum--;

NewTh = new Thread(new ThreadStart(RunNewFun));
NewTh.Start();
}
}
Console.WriteLine("任务队列,执行完成:"+RunNum);
}
static void RunNewFun()
{
NowThCount++;//加个

Console.WriteLine("我是线程:" + Thread.CurrentThread.ManagedThreadId);
Thread.Sleep(3000);
Console.WriteLine("我是线程:" + Thread.CurrentThread.ManagedThreadId + ".....结束");

NowThCount--;//减去
}
}
}


写在最后:感觉程序还不打完善,运行中会不会因为特殊原因照成异常,还在测试中…..
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: