using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace ConsoleApplication2
{
class Program
{
private static int poolFlag = 0;//标记
private const int amountThread = 10;//线程总量
private const int maxThread = 3;//可执行线程最大数量
private static Mutex muxConsole = new Mutex();
static void Main(string[] args)
{
for (int i = 0; i < amountThread; i++)
{
// 创建指定数量的线程
// 是线程调用Run方法
// 启动线程
Thread trd = new Thread(new ThreadStart(Run));
trd.Name = "线程" + i;
trd.Start();
}
}
public static void Run()
{
bool releasedFlag = false;
muxConsole.WaitOne(); //阻塞队列
Interlocked.Increment(ref poolFlag);//标记+1
if (poolFlag != maxThread) //判断是否等于上限
{
muxConsole.ReleaseMutex(); //如果此线程达不到可执行线程上限,则继续开通,让后面的线程进来
releasedFlag = true;
}
Console.WriteLine("{0} 正在运行...... ", Thread.CurrentThread.Name);
Thread.Sleep(5000); //模拟执行
Console.WriteLine("{0} 已经中止...... ", Thread.CurrentThread.Name);
//标记-1
Interlocked.Decrement(ref poolFlag);
if (!releasedFlag) muxConsole.ReleaseMutex();
}
}
}
线程池Demo
最新推荐文章于 2015-08-29 11:09:03 发布