Thread C#

/*
Mastering Visual C# .NET
by Jason Price, Mike Gunderloy
Publisher: Sybex;
ISBN: 0782129110
*/
/*
  Example14_3.cs illustrates the ThreadState property
*/
using System;
using System.Threading;
public class Example14_3 
{
  // the Countdown method counts down from 10 to 1
  public static void Countdown() 
  {
    for (int counter = 10; counter > 0; counter--) 
    {
      Console.Write(counter.ToString() + " ");
    }
    Console.WriteLine();
  }
  // the DumpThreadState method displays the current Thread's state
  // Note that ThreadState is a bitmask, and multiple states for the
  // same thread are valid
  public static void DumpThreadState (
    Thread t
    ) 
  {
    Console.Write("Current state: ");
    if ((t.ThreadState & ThreadState.Aborted) == ThreadState.Aborted)
      Console.Write("Aborted ");
    if ((t.ThreadState & ThreadState.AbortRequested) == 
     ThreadState.AbortRequested)
      Console.Write("AbortRequested ");
    if ((t.ThreadState & ThreadState.Background) == 
     ThreadState.Background)
      Console.Write("Background ");
    if ((t.ThreadState & 
     (ThreadState.Stopped | ThreadState.Unstarted | 
     ThreadState.Aborted)) == 0)
      Console.Write("Running ");
    if ((t.ThreadState & ThreadState.Stopped) == ThreadState.Stopped)
      Console.Write("Stopped ");
    if ((t.ThreadState & ThreadState.StopRequested) == 
     ThreadState.StopRequested)
      Console.Write("StopRequested ");
    if ((t.ThreadState & ThreadState.Suspended) == 
     ThreadState.Suspended)
      Console.Write("Suspended ");
    if ((t.ThreadState & ThreadState.SuspendRequested) == 
     ThreadState.SuspendRequested)
      Console.Write("SuspendRequested ");
    if ((t.ThreadState & ThreadState.Unstarted) == 
     ThreadState.Unstarted)
      Console.Write("Unstarted ");
    if ((t.ThreadState & ThreadState.WaitSleepJoin) ==
     ThreadState.WaitSleepJoin)
      Console.Write("WaitSleepJoin ");
    Console.WriteLine();
  }
  public static void Main() 
  {
    // create a second thread
    Thread t2 = new Thread(new ThreadStart(Countdown));
    DumpThreadState(t2);
    // launch the second thread
    t2.Start();
    DumpThreadState(t2);
    // and meanwhile call the Countdown method from the first thread
    Countdown();
    // shut down the second thread
    t2.Abort();
    DumpThreadState(t2);
  }
}