C#多线程(一)——简介
来源:互联网 发布:java函数的重载 编辑:程序博客网 时间:2024/05/11 12:23
多线程是为了同步完成多项任务,不是为了提高运行效率,而是为了提高资源使用效率来提高系统的效率。线程是在同一时间需要完成多项任务的时候实现的。一个程序开始运行时,它就是一个进程,进程所指包括运行中的程序和程序所使用到的内存和系统资源。而一个进程又是由多个线程所组成的,线程是程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针、程序计数器等),但代码区是共享的,即不同的线程可以执行同样的函数。多线程是指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务,也就是说允许单个程序创建多个并行执行的线程来完成各自的任务。
Thread类有几个至关重要的方法,描述如下:
• Start():启动线程
• Sleep(int):静态方法,暂停当前线程指定的毫秒数
• Abort():通常使用该方法来终止一个线程
• Suspend():该方法并不终止未完成的线程,它仅仅挂起线程,以后还可恢复。
• Resume():恢复被Suspend()方法挂起的线程的执行
• Join():表示插入执行,比如有a和b两个线程同时运行,那么应该是没有规则的交替式运行,也就是一会儿执行a一会儿执行b,如果在b线程中使用线程a调用了join方法,那么b就必须等待a执行完毕后才能执行。例如:
static void Main(string[] args)
{
//定义线程a
Thread threada = new Thread(delegate()
{
for (int i = 0; i < 100; i++)
{
Console.Write("1");
}
});
//定义线程b
Thread threadb = new Thread(delegate()
{
//在b线程执行中调用a线程join
threada.Join();
for (int i = 0; i < 100; i++)
{
Console.Write("2");
}
});
//启动线程
threada.Start();
threadb.Start();
Console.Read();
}
首先注释掉Threada.Join();这段代码,执行结果如下:
取消Threada.Join()的注释,执行结果如下:
ThreadState在各种情况下的可能取值如下:
• Aborted:线程已停止
• AbortRequested:线程的Thread.Abort()方法已被调用,但是线程还未停止
• Background:线程在后台执行,与属性Thread.IsBackground有关
• Running:线程正在正常运行
• Stopped:线程已经被停止
• StopRequested:线程正在被要求停止
• Suspended:线程已经被挂起(此状态下,可以通过调用Resume()方法重新运行)
• SuspendRequested:线程正在要求被挂起,但是未来得及响应
• Unstarted:未调用Thread.Start()开始线程的运行
• WaitSleepJoin:线程因为调用了Wait(),Sleep()或Join()等方法处于封锁状态
当线程之间争夺CPU时间时,CPU按照是线程的优先级给予服务的。在C#应用程序中,用户可以设定5个不同的优先级,由高到低分别是Highest,AboveNormal,Normal,BelowNormal,Lowest,在创建线程时如果不指定优先级,那么系统默认为ThreadPriority.Normal。给一个线程指定优先级,我们可以使用如下代码:
//设定优先级为最低
myThread.Priority=ThreadPriority.Lowest;
IsBackground说明 当初始化一个线程,把Thread.IsBackground=true的时候,指示该线程为后台线程。后台线程将会随着主线程的推出而退出。后台线程不妨碍程序的终止,只要所有前台线程都终止后,CLR就会对每一个活在的后台线程调用Abort()来彻底终止应用程序。 当在主线程中创建了一个线程,那么该线程的IsBackground默认是设置为FALSE的。也就是说,当主线程推出的时候,IsBackground=FALSE的线程还会继续执行下去,知道线程执行结束。只有IsBackground=TRUE的线程才会顺着主线程的推出而退出。
- C#多线程(一)——简介
- C#多线程(一)
- C#多线程(一)
- C#多线程(一)
- C# 多线程(一)
- C#多线程(一)
- C#多线程(一)
- C#多线程(一)
- C#多线程学习之(一)——提纲挈领
- C#多线程学习之(一)——提纲挈领
- C#的多线程机制探索(一)—多线程的概念
- c# 多线程(一) 多线程的认识
- C#多线程笔记(一)
- C# WinForm多线程(一)
- C#多线程简述(一)
- C#多线程整理(一)
- C#多线程编程(一)
- C#多线程学习(一)
- 硬盘分区表的修复(Ubuntu安装盘的另类用法)
- Windows服务进程的创建
- C#将DataTable海量数据导出到Excel
- C#实现按钮透明,窗体透明的方法
- 还记得那些老国手吗? 11
- C#多线程(一)——简介
- const 用法总结(一)
- blog参考
- 接口的显示实现
- 算法
- Eclipse、MyEclipse、Zend Studio 设置与应用总结(将一直累加更新)
- 纯忽悠程序员的开发要求(5):开发语言不重要,重要的是思想!
- SSO—— Single Sign On(单点登录)
- const 用法总结(二)