0

変数を使用する次のテスト プログラムがあります。ThreadStaticこのコードを試すと、NullReferenceException.

using System;
using System.Threading;

namespace MiscTests
{
    public class Person
    {
        public string Name { get; set; }
    }

    class Program
    {
        [ThreadStatic]
        private static Person _person = new Person { Name = "Jumbo" };

        static void Main(string[] args)
        {
            Thread t1 = new Thread(TestThread);
            t1.Start();
            Thread t2 = new Thread(TestThread1);
            t2.Start();         
            Console.ReadLine();
        }

        private static void TestThread(object obj)
        {
            Console.WriteLine("before: " + _person.Name);
            _person.Name = "TestThread";
            Console.WriteLine("after: " + _person.Name);
        }

        private static void TestThread1(object obj)
        {
            Console.WriteLine("before: " + _person.Name);
            _person.Name = "TestThread1";
            Console.WriteLine("after: " + _person.Name);
        }       
    }
}

誰でも説明できますか?

4

2 に答える 2

2

変数の初期[ThreadStatic]化子は、型を初期化するスレッドで 1 回だけ実行されます。

他のすべてのスレッドには が表示されますnull

于 2014-06-11T20:22:30.757 に答える
1

私が間違っていなければ、 _person をThreadStaticとして宣言しました。これは、実行中の 2 番目のスレッドがそれにアクセスできないため、null になることを意味します。

于 2014-06-11T20:23:08.173 に答える