using System; using System.Threading; class Test { static void Main() { Thread thread1 = new Thread(new ThreadStart(ThreadMethod)); Thread thread2 = new Thread(new ThreadStart(ThreadMethod)); thread1.Start(); thread2.Start(); thread1.Join(); thread2.Join(); GC.Collect(); GC.WaitForPendingFinalizers(); Console.WriteLine(CountClass.UnsafeInstanceCount); Console.WriteLine(CountClass.SafeInstanceCount); } static void ThreadMethod() { for(int i = 0; i < 10; i++) { new CountClass(); } } } class CountClass { static int unsafeInstanceCount = 0; static int safeInstanceCount = 0; static public int UnsafeInstanceCount { get {return unsafeInstanceCount;} } static public int SafeInstanceCount { get {return safeInstanceCount;} } public CountClass() { unsafeInstanceCount++; Interlocked.Increment(ref safeInstanceCount); } ~CountClass() { unsafeInstanceCount--; Interlocked.Decrement(ref safeInstanceCount); } }