We can call static and non-static methods on the execution of the thread. To call the static and non-static methods, you need to pass method name in the constructor of ThreadStart class. For static method, we don't need to create the instance of the class. You can refer it by the name of class.
using System; using System.Threading; public class MyThread { public static void Thread1() { for (int i = 0; i < 10; i++) { Console.WriteLine(i); } } } public class ThreadExample { public static void Main() { Thread t1 = new Thread(new ThreadStart(MyThread.Thread1)); Thread t2 = new Thread(new ThreadStart(MyThread.Thread1)); t1.Start(); t2.Start(); } }
The output of the above program can be anything because there is context switching between the threads.
For non-static method, you need to create instance of the class so that you can refer it in the constructor of ThreadStart class.
using System; using System.Threading; public class MyThread { public void Thread1() { for (int i = 0; i < 10; i++) { Console.WriteLine(i); } } } public class ThreadExample { public static void Main() { MyThread mt = new MyThread(); Thread t1 = new Thread(new ThreadStart(mt.Thread1)); Thread t2 = new Thread(new ThreadStart(mt.Thread1)); t1.Start(); t2.Start(); } }
Like above program output, the output of this program can be anything because there is context switching between the threads.
Let's see an example where we are executing different methods on each thread.
using System; using System.Threading; public class MyThread { public static void Thread1() { Console.WriteLine("task one"); } public static void Thread2() { Console.WriteLine("task two"); } } public class ThreadExample { public static void Main() { Thread t1 = new Thread(new ThreadStart(MyThread.Thread1)); Thread t2 = new Thread(new ThreadStart(MyThread.Thread2)); t1.Start(); t2.Start(); } }