线程池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();         }    }}

 
原创粉丝点击