线程池Demo

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

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值