创建多线程的
步骤:
- 创建指向线程所要执行方法的委托
- 实例化Thread类,并传入一个指向线程所要执行方法的委托。(这时线程已经产生,但还没有运行)
- 调用Thread实例的Start方法,标记该线程可以被CPU执行了,但具体执行时间由CPU决定
System.Threading.Thread类
Thread类是是控制线程的基础类,位于System.Threading命名空间下,具有4个重载的构造函数:
- Thread(ParameterizedThreadStart)初始化Thread类的新实例,指定允许对象在线程启动时传递给线程的委托。要执行的方法是【有参的】。
- Thread(ParameterizedThreadStart,int) 初始化Thread类的新实例,指定允许对象在线程启动时传递给线程的委托,并指定线程的最大堆栈大小,要执行的方法是【有参的】。
- Thread(ThreadStart)初始化Thread类的新实例。要执行的方法是【无参的】。
- Thread(ThreadStart,Int)初始化Thread类的新实例,指定线程的最大堆栈大小。要执行的方法是【无参的】。
ThreadStart和ParameterizedThreadStart本质上是一个委托,
ThreadStart是无参数的委托,
ParameterizedThreadStart是有参数的委托,他的输入参数必须是一个object类型的,而且只有一个输入参数。
创建无参数线程实例
static void Main(string[] args){
ThreadStart childref = new ThreadStart(method_function);//创建线程委托
Thread childThread = new Thread(childref);//创建子线程
childThread.Start();//启动线程
}
public static void method_function(){
Console.WriteLine("hello");
}
创建有参数线程实例
static void Main(string[] args){
ParameterizedThreadStart cr2 = new ParameterizedThreadStart(outputfunc2);//创建线程委托
Thread childThread = new Thread(cr2);//创建子线程
childThread.Start(5);//带参数启动
}
public static void outputfunc2(object b){
int a = Convert.ToInt32(b);
Console.WriteLine(a);
}
System.Threading.Thread类
常用属性
public static Context CurrentContext { get; } //获取线程正在其中执行的当前上下文。
public static Thread CurrentThread { get; } //获取当前正在运行的线程。
public ExecutionContext ExecutionContext { get; }//获取一个ExecutionContext 对象,
//该对象包含有关当前线程的各种上下文的信息。
public bool IsAlive { get; }//获取当前线程的执行状态。此线程已启动并且尚未