考虑一个战场游戏的场景。游戏玩家埋了一个炸弹来引爆敌人的军营。炸弹一引爆,就会以冒烟的形式显示爆炸并且军营消失。此外,您还会听到爆炸声。游戏的设计人员使用线程在屏幕上显示爆炸并同时播放爆炸声音。
线程是操作系统分配处理器时间的基本单元。这是程序中独立的执行路径。您可以使用程序中的线程同时执行多个任务。
例如,一个中央处理单元(CPU)同时一起完成各种复杂的任务。进程包括任务例如写和打印文档、安装软件、在状态栏上显示日期和时间。所有这些进程都是由独立的线程处理的。
使用一个线程执行的进程被称为单线程进程,这里进程是一个程序的运行实例。单线程应用程序一次仅可以完成一个任务。在另一个任务开始之前,必须等待一个任务完成。下图显示了单线程进程。
要一次执行多个任务,可以在程序中创建多个线程。创建两个或多个线程的进程称为多线程进程。例如,任何Web览器,例如Internet Explorer是一个多线程应用程序。在浏览器中,可以在背景中打印一个页面同时滚动页面。同样,可以同时打开声音文件和观看动画片。在多线程进程汇中的每个线程同时在运行,并且维护不同的执行流程。
下图显示了一个有两个线程的多线程进程。
线程模型
程序使用线程增强CPU的效率。在单线程系统中,使用称为带有轮询的时间循环的方法。轮询是一次执行一个事件的进程。在带有轮询的事件循环方法中,单一线程以无限循环的方式运行,指导它的操作完成为止。当操作完成的时候,时间循环将控制发送到适当的事件处理程序。系统中不再有进程发现直到事件处理程序响应。这导致CPU时间被浪费。
这需要用户交互和需要对用户的活动作出快速反映的软件中使用多线程。它还提供丰富的用户体验。同时,还快速执行向用户展现数据所需的计算。
在单线程应用程序中,当线程从执行被挂起,整个程序就会停止执行,因为它正在等待一个系统资源。可以使用多线程防止这样的情况。在多线程中,一个线程等待的CPU时间可以被用来执行另一个任务。
C#中,可以使用Thread类来使用线程。System.Threading.Thread类用于构造和访问多线程应用程序中的单个线程。在进程中第一个执行的线程称为主线程。
主线程
主线程在执行程序是被创建。您可以使用Thread类CurrentThread属性访问程序的主线程。这是因为,一执行程序,就会创建主流程且它是运行在程序中的唯一线程。但是,可以使用Thread类在程序中创建其他线程。此类线程被称为子线程。
以下代码显示了使用Thread类的CurrentThread属性引用主流程:
using System;
using System.Threading;
namespace ThreadExample
{
class MainThreadExample
{
public static void Main(string[] args)
{
Thread Th = Thread.CurrentThread;
Th.Name = "MainThread";
Console.WriteLine("The current thread after name change :{0}",Th.Name);
Console.ReadLine();
}
}
}
在上述代码中,使用Thread类的CurrentThread参数获得了当前线程的引用。线程的引用被存储与Th变量中。Name参数被用于设置主线程的名称。Console.WriteLine()方法被用于显示运行在程序中的主线程的新名称。
下图显示了上述代码的输出。
使用线程
使用线程包括创建、管理和销毁线程。在C#中,可以通过创建Thread类的对象来创建线程。
Thread类的其他方法允许管理线程的声明周期和当需要的时候销毁线程。
在Thread