zoukankan      html  css  js  c++  java
  • .NET 中的线程池和[ThreadStatic]属性

    本文实验了一下.NET 中的线程池和[ThreadStatic]属性的作用:

    class Program
    {
        [ThreadStatic]
        static int Number;
    
        static void Main(string[] args)
        {
            //for (int i = 0; i < 10; i++)
            //{
            //    ThreadPool.QueueUserWorkItem(new WaitCallback(ThreadProc));
            //}
            for (int i = 0; i < 10; i++)
            {
                Thread t = new Thread(delegate()
                {
                    ThreadProc(null);
                });
                t.Start();
            }
            Console.WriteLine("Press any key to exit.");
            Console.Read();
        }
    
        static void ThreadProc(Object stateInfo)
        {
            Interlocked.Increment(ref Number);
            Console.WriteLine(Number);
        }
    
    }

    image

    图一

    image

    图二
    上图分别为ThreadPool和不用的结果。由图二可见,由于 ThreadStatic属性的作用,尽管Number是静态变量,每个线程中都各自独立。而由图一,由于线程池会重用线程,只有4个独立的Number变量创建出来。因此对于线程池,每个线程结束时清理静态变量是非常重要的。

  • 相关阅读:
    div弹出层
    经典SQL语句
    sql连接及操作
    给flash加上连接
    在c#中图片原比例缩放
    悬浮提示筐
    拖动板块
    IFrame自适应高度
    SQL语句中的日期计算
    注意Request.Cookies["UserID"]的用法
  • 原文地址:https://www.cnblogs.com/foamliu/p/2125203.html
Copyright © 2011-2022 走看看