单线程顾名思义,就是只有一个线程,默认情况下,系统为应用程序分配一个主线程,该线程执行程序中以Main方法开始和结束的代码。
线程具有生命周期,它包含3个状态,分别为出生状态、就绪状态和运行状态。
出生状态就是用户在创建线程时处于的状态,在用户使用该线程实例调用Start方法之前,线程都处于出生状态;当用户调用Start方法后,线程处于就绪状态(又被称为可执行状态);当线程得到系统资源后就进入运行状态。
一旦线程进入可执行状态,它会在就绪与执行状态下辗转,同时也有可能进入等待、休眠、阻塞或死亡状态。当处于运行状态下的线程调用Thread类中Suspend方法,该线程处于等待状态,进入等待状态的线程必须调用Thread类中的Resume方法才能被唤醒;当线程调用一个Thread类中的Sleep方法时,线程就进入休眠状态;如果一个线程在运行状态下发出输入/输出请求,该线程将进入阻塞状态,在其等待输入/输出结束时,线程进入就绪状态,对于阻塞的线程来说,即使系统资源空闲,线程依然不能回到执行状态;当线程执行完毕时,线程进入死亡状态。
图1描述了线程的生命周期的各个状态。
图1 线程的生命周期状态图
例如,新建一个Windows应用程序,程序会在Program.cs文件中自动生成一个Main方法,该方法就是主线程的启动入口点。Main方法代码如下。
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}