线程池Demo
来源:互联网 发布:js实现时间选择器区间 编辑:程序博客网 时间:2024/05/11 03:52
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(); } }}