这篇文章介绍了C#多线程之线程池(ThreadPool)的用法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
一、简介
前面介绍了平时用到的大多数的多线程的例子,但在实际开发中使用的线程往往是大量的和更为复杂的,这时,每次都创建线程、启动线程。从性能上来讲,这样做并不理想(因为每使用一个线程就要创建一个,需要占用系统开销);从操作上来讲,每次都要启动,比较麻烦。为此引入的线程池的概念。
好处:
- 1.减少在创建和销毁线程上所花的时间以及系统资源的开销
 - 2.如不使用线程池,有可能造成系统创建大量线程而导致消耗完系统内存以及”过度切换”。
 
在什么情况下使用线程池?
- 1.单个任务处理的时间比较短
 - 2.需要处理的任务的数量大
 
线程池最多管理线程数量=“处理器数 * 250”。也就是说,如果您的机器为2个2核CPU,那么CLR线程池的容量默认上限便是1000。通过线程池创建的线程默认为后台线程,优先级默认为Normal。
二、代码
案例一:
    class Program
    {
        static void Main(string[] args)
        {
            ThreadPool.QueueUserWorkItem(new WaitCallback(ThreadMethod1), new object());    //参数可选
            Console.ReadKey();
        }
        public static void ThreadMethod1(object val)
        {
            for (int i = 0; i <= 10000; i++)
            {
                if (i % 1000 == 0)
                {
                    if (string.IsNullOrEmpty(Thread.CurrentThread.Name) )
                    {
                        Thread.CurrentThread.Name = "Thred_" + i;
                    }
                    Console.WriteLine("循環{0}次的線程的線程名稱為:{1}",i,Thread.CurrentThread.Name);
                }
            }
        }
    }运行结果:
案例二:
    class Program
    {
        public static void Main()
        {
            // Queue the task.
            ThreadPool.QueueUserWorkItem(ThreadProc);
            Console.WriteLine("Main thread does some work, then sleeps.");
            Thread.Sleep(1000);
            Console.WriteLine("Main thread exits.");
            Console.ReadKey();
        }
        // This thread procedure performs the task.
        static void ThreadProc(Object stateInfo)
        {
            // No state object was passed to QueueUserWorkItem, so stateInfo is null.
            Console.WriteLine("Hello from the thread pool.");
        }
    }运行结果:
到此这篇关于C#多线程之线程池(ThreadPool)的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持得得之家。
				 沃梦达教程
				
			本文标题为:C#多线程之线程池(ThreadPool)
				
        
 
            
        
             猜你喜欢
        
	     - 如何使用C# 捕获进程输出 2023-03-10
 - Oracle中for循环的使用方法 2023-07-04
 - C# 使用Aspose.Cells 导出Excel的步骤及问题记录 2023-05-16
 - Unity Shader实现模糊效果 2023-04-27
 - WPF使用DrawingContext实现绘制刻度条 2023-07-04
 - c# 模拟线性回归的示例 2023-03-14
 - .NET CORE DI 依赖注入 2023-09-27
 - 在C# 8中如何使用默认接口方法详解 2023-03-29
 - user32.dll 函数说明小结 2022-12-26
 - Unity3D实现渐变颜色效果 2023-01-16
 
						
						
						
						
						
				
				
				
				