```
        Thread thread1 = new Thread(new ThreadStart(c1.print));
        Thread thread2 = new Thread(new ThreadStart(c2.print));
        Thread thread3 = new Thread(new ThreadStart(c3.print));       

        thread1.Start();
        thread2.Start();
        thread3.Start();

```

When I run above code, sometimes thread 3 is printed before thread 1 and thread 2 even I specified thread1 to start 1st. Why does this happen?