|
按自己的想法实现的C#版本的限制并发线程数的例程,给有需要的读者- using System;
- using System.Collections.Generic;
- using System.Text;
- using System.Threading;
- namespace WZDM.Test
- {
- /// <summary>
- /// 限制并发线程数例程
- /// </summary>
- public class TestThread
- {
- int _currentThreads = 0;
- int _maxThreads = 10;
- public void Test()
- {
- while (true)
- {
- //_maxThreads = new Random().Next(1, 10);
- for (int i=0; i<100; i++)
- {
- // 在此进行数量限制
- if (_currentThreads >= _maxThreads)
- break;
- // 开启线程
- lock (typeof(TestThread))
- {
- _currentThreads++;
- if (_currentThreads > _maxThreads)
- _currentThreads = _maxThreads;
- string currentInfo = string.Format("thread {0}/{1}", _currentThreads, _maxThreads);
- Console.WriteLine(currentInfo + " start");
- Thread thread = new Thread(new ParameterizedThreadStart(Run));
- thread.Start(currentInfo);
- }
- }
- System.Threading.Thread.Sleep(2000);
- }
- }
- // 线程任务
- void Run(object obj)
- {
- for (int i = 0; i < 100; i++)
- {
- Console.WriteLine("{0}:{1}", obj, i);
- Thread.Sleep(100);
- }
- Console.WriteLine("{0} finished", obj);
- lock (typeof(TestThread))
- {
- _currentThreads--;
- if (_currentThreads < 0)
- _currentThreads = 0;
- }
- }
- }
- }
复制代码 |
|