




已阅读5页,还剩42页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第十一章创建多线程程序,沈项军计算机科学与通信工程学院,.,2,内容提要,实现线程定义线程的生命周期实现多线程识别线程的优先级在线程中使用同步识别进程间的通信,.,3,同时执行所有任务,时间更少,效率更高,线程简介,在同一时间点执行各项进程,编译程序发送/接收邮件打印文件其他,操作系统允许计算机同时执行多项操作,程序(进程),.,4,线程简介,程序1,程序2,线程1,线程2,线程3,线程1,线程2,线程3,单独的执行路径,多线程,.,5,进程和线程,进程是程序的一次执行一个或多个线程构成一个进程,进程,线程,.,6,线程简介,在以下情况中可能要使用到多线程:,程序需要同时执行两个或多个任务,程序要等待某事件的发生,例如用户输入、文件操作、网络操作、搜索等,后台程序,.,7,线程及多线程工作原理,线程表示计算机执行的指令序列。一个处理器在某一刻只能处理一个任务。如果有一个多处理器系统,理论上它可以同时执行多个指令一个处理器执行一个指令,但大多数人使用的是单处理器计算机,这种情况是不可能同时发生的。而实际上,Windows操作系统表面上可以同时处理多个任务,这个过程称为抢先式多任务处理(pre-emptivemultitasking)。,.,8,抢先式多任务处理,所谓抢先式多任务处理,是指Windows在某个进程中选择一个线程,该线程运行一小段时间。Microsoft没有说明这段时间有多长,因为为了获得最好的性能,Windows有一个内部操作系统参数来控制这个时间值。但在运行Windows应用程序时,用户不需要知道它。从我们的角度来看,这个时间非常短,肯定不会超过几毫秒。这段很短的时间称为线程的时间片(timeslice)。过了这个时间片后,Windows就收回控制权,选择下一个被分配了时间片的线程。这些时间片非常短,我们可以认为许多事件是同时发生的。,.,9,实现线程,线程被用来运行完成大型和复杂计算的程序。使用一个线程执行的进程被称为单线程进程,这里进程是一个程序的运行实例。单线程程序一次仅可以完成一个任务。在另一个任务开始之前,你必须等待一个任务完成。,.,10,实现线程,下图显示了单线程进程。为了一次执行多于一个任务,你可以在程序中创建多个线程。创建两个或更多线程的进程被称为多线程进程。,.,11,C#中的线程模型,在单线程模型中,程序使用轮询来调用事件循环。轮询是一个进程,在其中一次执行一个单一的事件。在带有轮询方法的事件循环中,单一线程以无限循环的方式运行直到它的操作完成。在单线程程序中,如果线程从执行被挂起因为它正在等待一个系统资源,整个程序停止执行。在多线程中,一个线程等待的CPU时间可以被用来完成另一个任务。,.,12,C#中的线程模型,在CLR中有两种线程System.Threading.Thread代表托管线程System.Diagonostics.ProcessThread代表OS线程usingSystem;classHelloWorldstaticvoidMain()Console.WriteLine(Hello,World);Console.ReadLine();,.,13,主线程,主线程在C#程序开始执行的时候被自动创建。使用Thread类被排他创建的线程被称为子线程,其中主线程被称为父线程或者基本线程。你可以使用Thread类的CurrentThread属性来访问线程。,.,14,使用线程,在C#中,通过ThreadStart创建线程调用方法的引用,并将该引用通过创建一个Thread类型的对象创建一个线程,接着调用新线程的Start()方法启动线程。ThreadStartChildRef=newThreadStart(ChildThreadCall);ThreadChildThread=newThread(ChildRef);ChildThread.Start();,引用System.Threading命名空间,Thread线程实例名=newThread(newThreadStart(方法名);,只创建但不启动线程,线程实例名.Start();,启动线程,.,15,使用线程,新线程开始异步执行线程的方法调用。线程的处理启动线程(Start方法)挂起线程(Suspend方法)挂起不会立即生效恢复被刮起的线程(Resume方法)恢复不会立即生效终止线程(Abort方法)线程的休眠(Sleep方法),.,16,管理线程,有许多你可能需要完成的任务来管理线程的活动或生命。可以通过使用Thread类的各种可用线程方法来管理这些任务。Thread.Sleep()静态方法调用静态CurrentThread方法,然后它在指定的时间内暂停线程。,.,17,管理线程,临时挂起会话进程(用户通常不会这么做,但这仅是一个示例,在更真实的示例中,用户可能是暂停声音文件或视频文件的播放)。在主线程中编写如下代码,挂起该线程:depthChangeThread.Suspend();如果需要恢复该线程,可以使用下面的方法:depthChangeThread.Resume();如需要退出该线程depthChangeThread.Abort();,.,18,线程使用示例,usingSystem;usingSystem.Threading;classBasicThreadApppublicstaticvoidChildThreadCall()tryConsole.WriteLine(Childthreadstarted);Console.WriteLine(Childthread-countingto10);for(inti=0;i10;i+)Thread.Sleep(500);Console.Write(0.,i);Console.WriteLine(Childthreadfinished);catch(ThreadAbortExceptione)Console.WriteLine(Exceptionhascaught);finallyConsole.WriteLine(ChildThread-unabletobefinished);,publicstaticvoidMain()ThreadStartChildRef=newThreadStart(ChildThreadCall);Console.WriteLine(Main-CreatingChildThread);ThreadChildThread=newThread(ChildRef);ChildThread.Start();Console.WriteLine(Main-Sleepingfor2seconds);Thread.Sleep(2000);Console.WriteLine(nMain-Abortingchildthread);ChildThread.Abort();Console.ReadLine();,.,19,线程生命周期,当System.Threading.Thread类的对象被创建的时候,线程的生命周期开始。线程的生命周期结束于任务的执行。在线程的生命周期中有各种状态。这些状态是:未启动状态运行态未运行态死亡态,.,20,未启动状态,当一个Thread类的实例被创建的时候,线程进入未启动状态。新线程是Thread类的一个空对象,没有系统资源例如内存被分配给它。,.,21,运行态,线程一直处在未启动状态直到程序调用Thread类的Start()方法,它将线程置于运行态,并且立即返回控制到调用的线程。这个状态也被称为准备或启动状态。新启动的线程和程序中任何其它线程同时执行。,.,22,Start(),Started,WorkCompleted,Stopped,线程生命周期,.,23,未运行态,如果它处于下面的状态,那么线程处于未运行态休眠等待阻塞,.,24,Start(),Started,Suspend(),Suspended,Resume(),线程生命周期,.,25,Start(),Started,Sleep(),Wait/JoinSleep,Interrupt(),TimeExpires,线程生命周期,.,26,死亡状态,当线程方法的语句完成的时候,运行线程进入死亡状态。这个状态也被称为终结态。程序可以通过在适当的线程对象上调用Thread类的Abort()方法来强迫线程进入死亡态。,.,27,Start(),Started,Abort(),StopRequest,ThreadRespondstoStopRequest,Stopped,线程生命周期,.,28,介绍多线程,多线程有助于同时完成各种操作,节省用户的时间。多线程允许你在一个程序中完成多个任务。多任务是同时执行多个任务的能力。多任务可以被分成如下类型:基于进程的多任务基于线程的多任务,该女士在同时吃苹果、看书并在电脑上工作。,.,29,多线程的优点和限制,多线程的优点有:改进性能最小化系统资源同时访问多个程序程序结构简化多线程的限制有:竞态情况同时读写同一个变量死锁情况互相等待对方释放所需资源饥饿锁低优先级的线程无限等待,.,30,创建多线程示例,usingSystem;usingSystem.Threading;classThreadSchedulepublicstaticvoidChildThread1()Console.WriteLine(Childthread1started);Console.WriteLine(Childthread-countingfrom1to10);for(intT=1;T11;T+)for(intCnt=0;Cnt100;Cnt+)Console.Write(.);Console.Write(0,T);Console.WriteLine(Childthread1finished);publicstaticvoidChildThread2()Console.WriteLine(Childthread2started);Console.WriteLine(Childthread-countingslowlyfrom11to20);for(intT=11;T21;T+)for(intCnt=0;Cnt0)/卖书过程Thread.Sleep(1000);num=num-1;Console.WriteLine(售出一本);elseConsole.WriteLine(没有了);,publicclassMyClasspublicstaticvoidMain()BookShopa=newBookShop();Threadt1=newThread(newThreadStart(a.Sale);Threadt2=newThread(newThreadStart(a.Sale);t1.Start();t2.Start();Console.Read();,.,43,同步注意问题,不要滥用同步死锁竞态条件,.,44,识别进程间的通信,进程是程序的一个运行实例。运行时在同一计
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025版建筑企业合伙人合作协议书-装配式建筑技术培训
- 二零二五年度合伙人信息保密与知识产权共享合同
- 2025版EPS节能环保施工技术合作合同
- 二零二五年度建筑工程安全监理服务合同范本
- 二零二五版互联网+路演展示厅使用权转让合同
- 电影剧本改编与授权聘用合同书
- 2025版智慧家居小区物业承包与智能家居合同
- 吊车买卖及售后服务协议
- 二手汽车买卖合同范本
- 二零二五年度电梯安装与节能减排服务协议
- 留学服务流程
- 供应链金融服务协议书范本
- 施工挂靠协议(2025版)
- 2024年度宾馆酒店工作服定制与统一着装规范合同3篇
- 呼吸危重症患者营养支持
- 中建幕墙施工专项方案
- 《电子级三氯氢硅的化学气相沉积评价方法》
- 二年级上册语文第1课《小蝌蚪找妈妈》知识点及练习题
- 剪刀式登高车安全技术交底
- (外研版3起)英语五年级上册单词字帖书写练习(手写体)高清打印版
- 人音版4年级上册第三单元快乐的校园
评论
0/150
提交评论