Thread C# Tutorial

using System;
using System.Threading;
   
class Database
{
    public void SaveData(string text)
    {
        Console.WriteLine("[SaveData] Started");
   
        Monitor.Enter(this);
        Console.WriteLine("[SaveData] Working");
   
        throw new Exception("ERROR!");
   
        for (int i = 0; i < 50; i++)
        {
            Thread.Sleep(100);
            Console.Write(text);
        }
        Monitor.Exit(this);
   
        Console.WriteLine("\n[SaveData] Ended");
    }
}
   
class ThreadMonitor3App
{
    public static Database db = new Database();
   
    public static void WorkerThreadMethod1()
    {
        Console.WriteLine("[WorkerThreadMethod1] Started");
   
        Console.WriteLine("[WorkerThreadMethod1] " +
            "Calling Database.SaveData");
   
        try
        {
            db.SaveData("x");
        }
        catch{}
   
        Console.WriteLine("[WorkerThreadMethod1] Finished");
    }
   
    public static void WorkerThreadMethod2()
    {
        Console.WriteLine("[WorkerThreadMethod2] Started");
   
        Console.WriteLine("[WorkerThreadMethod2] " +
            "Calling Database.SaveData");
        try
        {
            db.SaveData("o");
        }
        catch{}
   
        Console.WriteLine("[WorkerThreadMethod2] Finished");
    }
   
    public static void Main()
    {
        ThreadStart worker1 = new ThreadStart(WorkerThreadMethod1);
        ThreadStart worker2 = new ThreadStart(WorkerThreadMethod2);
   
        Thread t1 = new Thread(worker1);
        Thread t2 = new Thread(worker2);
   
        t1.Start();
        t2.Start();
   
        Console.ReadLine();
    }
}