• 线程池(ThreadPool)


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

    运行结果:


    技术的发展日新月异,随着时间推移,无法保证本博客所有内容的正确性。如有误导,请大家见谅,欢迎评论区指正!
    我创建了一个.NET开发交流群,用于分享学习心得和讨论相关技术难题。欢迎有兴趣的小伙伴扫码入群,相互学习!

  • 相关阅读:
    Ubuntu下安装了java但启动eclipse报错说没装java
    Servlet之Filter详解
    使用mybatis-generator自动生成model、dao、mapping文件
    深入浅出MyBatis
    彻底理解字符编码
    Java多线程系列
    【Swagger2】解决swagger文档地址请求404的问题
    【Git】Git如何合并某一次commit的内容到指定分支
    【Iterm2】如何解决iterm2窗口自动隐藏的问题
    【Git】.DS_Store 是什么文件
  • 原文地址:https://www.cnblogs.com/wml-it/p/14822883.html
Copyright © 2020-2023  润新知