Thread C# Tutorial

using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
class Tester
{
    static long counter = 0;
    //new Tester();
    static void Main()
    {
        Thread[] myThreads = {
               new Thread( new ThreadStart(Decrementer) ),
               new Thread( new ThreadStart(Incrementer) )              
            };
        int ctr = 1;
        foreach (Thread myThread in myThreads)
        {
            myThread.IsBackground = true;
            myThread.Start();
            myThread.Name = "Thread" + ctr.ToString();
            ctr++;
            Console.WriteLine("Started thread {0}", myThread.Name);
            Thread.Sleep(50);
        }
        foreach (Thread myThread in myThreads)
        {
            myThread.Join();
        }
    }
    static void Decrementer()
    {
        try
        {
            Monitor.Enter(counter);
            if (counter < 10)
            {
                Console.WriteLine(Thread.CurrentThread.Name);
                Console.WriteLine(counter);
                Monitor.Wait(counter);
            }
            while (counter > 0)
            {
                long temp = counter;
                temp--;
                Thread.Sleep(1);
                counter = temp;
                Console.WriteLine(Thread.CurrentThread.Name);
                Console.WriteLine(counter);
            }
        }
        finally
        {
            Monitor.Exit(counter);
        }
    }
    static void Incrementer()
    {
        try
        {
            Monitor.Enter(counter);
            while (counter < 10)
            {
                long temp = counter;
                temp++;
                Thread.Sleep(1);
                counter = temp;
                Console.WriteLine(Thread.CurrentThread.Name);
                Console.WriteLine(counter);
            }
            Monitor.Pulse(counter);
        }
        finally
        {
            Monitor.Exit(counter);
        }
    }
}