版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、2012年年2月月29日日10时时35分分Visual C#.NET程序设计教程(第程序设计教程(第2版)版)四川省精品课程四川省精品课程、四川省高等教育质量工程建设项目四川省高等教育质量工程建设项目Email:LFQ人民邮电出版社与电子科技大学成都学院联合打造精品教材第1页电子科大成都学院计算机系电子科大成都学院计算机系课件制作:罗福强、杨剑课件制作:罗福强、杨剑E-Mail:LFQ501SOHU.COm2022-5-162012年年2月月29日日10时时35分分Visual C#.NET程序设计教程(第程序设计教程(第2版)版)四川省精品课程四川省精品课程、四川省高等教育质量工程建设项目四
2、川省高等教育质量工程建设项目Email:LFQ第2页人民邮电出版社与电子科技大学成都学院联合打造精品教材1. 总体要求总体要求v 了解进程及线程的概念。了解进程及线程的概念。v 掌握使用掌握使用C#进行多线程的创建及简单控制。进行多线程的创建及简单控制。v 掌握线程的同步策略。掌握线程的同步策略。v 了解线程池技术。了解线程池技术。v 掌握异步编程的设计与实现技术掌握异步编程的设计与实现技术2. 学习重点学习重点v 线程的启动、管理和终止线程的启动、管理和终止v 线程安全的实现线程安全的实现v 异步编程的实现方法。异步编程的实现方法。2012年年2月月29日日10时时35分分Visual C#
3、.NET程序设计教程(第程序设计教程(第2版)版)四川省精品课程四川省精品课程、四川省高等教育质量工程建设项目四川省高等教育质量工程建设项目Email:LFQ第3页人民邮电出版社与电子科技大学成都学院联合打造精品教材线程创建与控制线程创建与控制多线程的同步多线程的同步多线程的概念多线程的概念9.4线程池线程池异步编程异步编程9.59.52012年年2月月29日日10时时35分分Visual C#.NET程序设计教程(第程序设计教程(第2版)版)四川省精品课程四川省精品课程、四川省高等教育质量工程建设项目四川省高等教育质量工程建设项目Email:LFQ第4页人
4、民邮电出版社与电子科技大学成都学院联合打造精品教材线程和进程线程和进程v9.1.2 线程的生命周期和状态线程的生命周期和状态v9.1.3 线程的优先级线程的优先级2012年年2月月29日日10时时35分分Visual C#.NET程序设计教程(第程序设计教程(第2版)版)四川省精品课程四川省精品课程、四川省高等教育质量工程建设项目四川省高等教育质量工程建设项目Email:LFQ第5页人民邮电出版社与电子科技大学成都学院联合打造精品教材v进程是一个正在运行的应用程序进程是一个正在运行的应用程序,拥有独立的拥有独立的资源,进程之间相互隔离,互不干扰资源,进程之间相互隔离,互不干扰。v线程是操作系统
5、分配处理器时间的基本单元。线程是操作系统分配处理器时间的基本单元。一个进程可以包含一个或多个线程。线程共享一个进程可以包含一个或多个线程。线程共享其所属进程所拥有的资源其所属进程所拥有的资源。v线程处理通常分为两大类:线程处理通常分为两大类:v(1)单线程处理单线程处理:指一个进程中只能有一个线程指一个进程中只能有一个线程v(2)多线程处理多线程处理:指将一个进程划分为多个线程指将一个进程划分为多个线程,可可最大限度地利用处理器和用户的时间,提最大限度地利用处理器和用户的时间,提高系统的效率。高系统的效率。2012年年2月月29日日10时时35分分Visual C#.NET程序设计教程(第程序
6、设计教程(第2版)版)四川省精品课程四川省精品课程、四川省高等教育质量工程建设项目四川省高等教育质量工程建设项目Email:LFQ第6页人民邮电出版社与电子科技大学成都学院联合打造精品教材v从线程被创建到被终止称为线程的生命周期从线程被创建到被终止称为线程的生命周期。2012年年2月月29日日10时时35分分Visual C#.NET程序设计教程(第程序设计教程(第2版)版)四川省精品课程四川省精品课程、四川省高等教育质量工程建设项目四川省高等教育质量工程建设项目Email:LFQ第7页人民邮电出版社与电子科技大学成都学院联合打造精品教材优先级属性最高Highest具有该优先级的线程会最先被考
7、虑调度执行较高Above Normal具有该优先级的线程会在最高优先级的线程之后、正常优先级的线程之前被考虑调度执行正常Normal具有该优先级的线程会在较高优先级的线程之后、较低优先级的线程之前被考虑调度执行较低Below Normal具有该优先级的线程会在正常优先级的线程之后、最低优先级的线程之前被考虑调度执行最低Lowest具有该优先级的线程会最后被考虑调度执行2012年年2月月29日日10时时35分分Visual C#.NET程序设计教程(第程序设计教程(第2版)版)四川省精品课程四川省精品课程、四川省高等教育质量工程建设项目四川省高等教育质量工程建设项目Email:LFQ第8页人民邮
8、电出版社与电子科技大学成都学院联合打造精品教材v9.2.1创建和启动线程创建和启动线程v9.2.2 控制线程控制线程2012年年2月月29日日10时时35分分Visual C#.NET程序设计教程(第程序设计教程(第2版)版)四川省精品课程四川省精品课程、四川省高等教育质量工程建设项目四川省高等教育质量工程建设项目Email:LFQ第9页人民邮电出版社与电子科技大学成都学院联合打造精品教材v 在在.NET中,用户只需要利用中,用户只需要利用System.Threading提提供的大量线程编程类和接口来处理线程即可。供的大量线程编程类和接口来处理线程即可。其其中中,Thread类提供创建并控制线
9、程、设置线程优先级并获类提供创建并控制线程、设置线程优先级并获取运行状态等功能取运行状态等功能。v Thread类的常用属性包括:类的常用属性包括:uCurrentThread:获取当前正在运行的线程uIsAlive:获取当前线程的执行状态。如果此线程已启动并且尚未正常终止或中止,则为 true;否则为 false。uName:获取或设置线程的名称(默认为null)。uPriority:获取或设置线程的调度优先级(默认为ThreadPriority.Normal)uThreadState:获取当前线程的状态。2012年年2月月29日日10时时35分分Visual C#.NET程序设计教程(第程
10、序设计教程(第2版)版)四川省精品课程四川省精品课程、四川省高等教育质量工程建设项目四川省高等教育质量工程建设项目Email:LFQ第10页人民邮电出版社与电子科技大学成都学院联合打造精品教材v创建线程时,首先创建一个创建线程时,首先创建一个Thread类的对象类的对象,其其构造函数的参数是一个构造函数的参数是一个ThreadStart委托委托,该委托用来引用一个被托管了的作为新的线,该委托用来引用一个被托管了的作为新的线程执行的方法。然后,调用程执行的方法。然后,调用Thread对象的对象的Start()方法启动并执行新的线程。方法启动并执行新的线程。v操作演示:实例操作演示:实例9-1v详
11、细代码:见教材详细代码:见教材v执行效果:执行效果:2012年年2月月29日日10时时35分分Visual C#.NET程序设计教程(第程序设计教程(第2版)版)四川省精品课程四川省精品课程、四川省高等教育质量工程建设项目四川省高等教育质量工程建设项目Email:LFQ第11页人民邮电出版社与电子科技大学成都学院联合打造精品教材v 1暂停和恢复线程暂停和恢复线程v (1) 使用使用Thread.Sleepu立即将当前线程阻塞若干ms,进入WaitSleepJoin状态。调用Thread.Interrupt可提前恢复。v (2) 使用使用Thread.Suspendu将当前线程阻塞,但可调用Th
12、read.Resume恢复。注意:与Sleep不同的是,Supspend不会使线程立即停止执行,一切由CLR安排;如果线程尚未启动或已经停止,则不能将其挂起。v (3) 使用使用Thread.Joinu强制一个线程等待另一个线程而停止。2012年年2月月29日日10时时35分分Visual C#.NET程序设计教程(第程序设计教程(第2版)版)四川省精品课程四川省精品课程、四川省高等教育质量工程建设项目四川省高等教育质量工程建设项目Email:LFQ第12页人民邮电出版社与电子科技大学成都学院联合打造精品教材v2中断和中止线程中断和中止线程v(1) 使用使用Thread.Interruptu调
13、用方法可中断处于休眠的线程,将其重新放回调度队列中,可引发ThreadInterruptedException异常。v(2) 使用使用Thread.Abortu调用该方法可永久地终止一个线程,可引发ThreadAbortException异常。u操作演示: 【实例9-2】u详细代码:见教材u运行效果:2012年年2月月29日日10时时35分分Visual C#.NET程序设计教程(第程序设计教程(第2版)版)四川省精品课程四川省精品课程、四川省高等教育质量工程建设项目四川省高等教育质量工程建设项目Email:LFQ第13页人民邮电出版社与电子科技大学成都学院联合打造精品教材v9.3.1线程安全
14、线程安全v9.3.2 线程同步策略线程同步策略2012年年2月月29日日10时时35分分Visual C#.NET程序设计教程(第程序设计教程(第2版)版)四川省精品课程四川省精品课程、四川省高等教育质量工程建设项目四川省高等教育质量工程建设项目Email:LFQ第14页人民邮电出版社与电子科技大学成都学院联合打造精品教材v线程安全是指在多个线程并发使用某个对象时线程安全是指在多个线程并发使用某个对象时,该对象成员总是保持有效状态。,该对象成员总是保持有效状态。v1争用条件争用条件u两个或多个线程同时访问同一数据或资源时会导致不符合要求或无法预期的结果。v例如,有两个线程例如,有两个线程A和和
15、B,A线程要设置全局变线程要设置全局变量量X的值,的值,B线程要读取线程要读取X的值。假设线程的值。假设线程A完完成了任务,设置了成了任务,设置了X的值,线程的值,线程B才读取才读取X。这。这是一种合理并符合要求的情况。但如果是一种合理并符合要求的情况。但如果A还未完还未完成赋值,成赋值,B就开始读取,这时就会产生就开始读取,这时就会产生A、B两两个线程同时争夺变量个线程同时争夺变量X的现象,最终导致的现象,最终导致B读取读取一个错误的值。这就是争用条件一个错误的值。这就是争用条件2012年年2月月29日日10时时35分分Visual C#.NET程序设计教程(第程序设计教程(第2版)版)四川
16、省精品课程四川省精品课程、四川省高等教育质量工程建设项目四川省高等教育质量工程建设项目Email:LFQ第15页人民邮电出版社与电子科技大学成都学院联合打造精品教材v2死锁死锁u如果多个线程彼此等待对方释放其所占用的资源,则也会遇到线程安全问题。这种对线程执行的阻塞称为死锁。v例如,线程例如,线程A为从账户为从账户1向账户向账户2转账,先获取转账,先获取账户账户1的锁,然后准备获取账户的锁,然后准备获取账户2的锁,而此时的锁,而此时,线程,线程B为从账户为从账户2向账户向账户1转账,先获取账户转账,先获取账户2的锁,然后准备获取账户的锁,然后准备获取账户1的锁,在这种情况的锁,在这种情况下,两
17、个线程都因在等待对方已获取的锁而阻下,两个线程都因在等待对方已获取的锁而阻塞,并且由于两个线程都被阻塞,所以没有一塞,并且由于两个线程都被阻塞,所以没有一个线程会释放另一个线程继续执行所需的锁,个线程会释放另一个线程继续执行所需的锁,形成死锁。形成死锁。2012年年2月月29日日10时时35分分Visual C#.NET程序设计教程(第程序设计教程(第2版)版)四川省精品课程四川省精品课程、四川省高等教育质量工程建设项目四川省高等教育质量工程建设项目Email:LFQ第16页人民邮电出版社与电子科技大学成都学院联合打造精品教材v 为了防止因为共享资源而使线程无法正确执行,为了防止因为共享资源而
18、使线程无法正确执行,可通过可通过线程线程同步策略来实现线程安全同步策略来实现线程安全。v 1同步上下文同步上下文u上下文是一组有序的属性或规则,同步上下文策略就是直接使用.NET的SynchronizationAttribute类的构造函数对驻留在上下文中、符合上下文规则的对象启用简单的自动同步,确保同一时刻只有一个线程可以访问该对象。u可以使用SynchronizationAttribute属性为当前上下文和所有共享同一实例的上下文强行创建一个同步域,保证在上下文中只能有一个线程执行。v 操作演示:实例操作演示:实例9-3v 详细代码:见教材详细代码:见教材2012年年2月月29日日10时时
19、35分分Visual C#.NET程序设计教程(第程序设计教程(第2版)版)四川省精品课程四川省精品课程、四川省高等教育质量工程建设项目四川省高等教育质量工程建设项目Email:LFQ第17页人民邮电出版社与电子科技大学成都学院联合打造精品教材v 2同步代码区同步代码区v 该策略是只对特定的代码区域进行同步操作。这些特定的代该策略是只对特定的代码区域进行同步操作。这些特定的代码区一般多为方法中重要的代码段。除了可以同步实例方法码区一般多为方法中重要的代码段。除了可以同步实例方法外,该策略还可以对静态方法实施同步。外,该策略还可以对静态方法实施同步。v (1) Monitor类类:u其思想是首先
20、用其Enter()方法获得一个锁,然后用其Exit()方法释放该锁。一个线程一旦获得重要代码区的锁,其他线程就要等到该锁被释放后才能使用该代码区。v (2) C#中的中的Lock关键字关键字uC#中使用Lock关键字同样可以获得一个Monitor锁。只需要简单地用Lock语句将需要同步的代码括起来,括号表示受保护代码的起始点和终止点。v 操作演示:实例操作演示:实例9-4v 详细代码:见教材详细代码:见教材2012年年2月月29日日10时时35分分Visual C#.NET程序设计教程(第程序设计教程(第2版)版)四川省精品课程四川省精品课程、四川省高等教育质量工程建设项目四川省高等教育质量工
21、程建设项目Email:LFQ第18页人民邮电出版社与电子科技大学成都学院联合打造精品教材v (1) Interlocked类类:v 用于同步多个线程对共享变量的访问,可创建较高级别的用于同步多个线程对共享变量的访问,可创建较高级别的同步机制。同步机制。其其成员方法成员方法包括包括CompareExchange、Decrement、 Exchange和和Increment等。等。v (2) Mutex类类v 提供了跨进程或线程的同步。类似于提供了跨进程或线程的同步。类似于Monitor类。它只向类。它只向一个线程授予对共享资源的独占访问权。如果一个线程获一个线程授予对共享资源的独占访问权。如果一
22、个线程获取了取了Mutex对象,其他想要获取该对象,其他想要获取该对象对象的线程就会被挂起的线程就会被挂起,直到第一个线程释放该,直到第一个线程释放该Mutex对象。对象。v (3) ReaderWriterLock类类v 提供单个进程写和多个进程读的控制机制。当请求写线程提供单个进程写和多个进程读的控制机制。当请求写线程锁后,在写线程取得访问权之前,不会接受任何新的读线锁后,在写线程取得访问权之前,不会接受任何新的读线程,从而实现多个线程在任何时刻执行读方法,或允许单程,从而实现多个线程在任何时刻执行读方法,或允许单个线程在任何时刻执行写方法。个线程在任何时刻执行写方法。2012年年2月月2
23、9日日10时时35分分Visual C#.NET程序设计教程(第程序设计教程(第2版)版)四川省精品课程四川省精品课程、四川省高等教育质量工程建设项目四川省高等教育质量工程建设项目Email:LFQ第19页人民邮电出版社与电子科技大学成都学院联合打造精品教材v【实例【实例9-5】使用】使用ReaderWriterLock,模拟,模拟对某一资源的单写多读对某一资源的单写多读。v详细代码:详细代码:u见教材2012年年2月月29日日10时时35分分Visual C#.NET程序设计教程(第程序设计教程(第2版)版)四川省精品课程四川省精品课程、四川省高等教育质量工程建设项目四川省高等教育质量工程建
24、设项目Email:LFQ第20页人民邮电出版社与电子科技大学成都学院联合打造精品教材v9.4.1 线程池管理线程池管理v9.4.2 ThreadPool类类2012年年2月月29日日10时时35分分Visual C#.NET程序设计教程(第程序设计教程(第2版)版)四川省精品课程四川省精品课程、四川省高等教育质量工程建设项目四川省高等教育质量工程建设项目Email:LFQ第21页人民邮电出版社与电子科技大学成都学院联合打造精品教材v 线程池管理是指在多线程应用程序的初始化过程中创建线线程池管理是指在多线程应用程序的初始化过程中创建线程的集合。线程池中的每个线程都分派了一个任务,当完程的集合。线
25、程池中的每个线程都分派了一个任务,当完成任务时,该线程就返回线程池中等待下一次分派。成任务时,该线程就返回线程池中等待下一次分派。v (1) 普通线程管理普通线程管理v 服务器先创建服务器先创建10个新线程来响应客户请求,然后在整个生个新线程来响应客户请求,然后在整个生存期内管理它们。在某个运行时刻,系统可能会耗尽所有存期内管理它们。在某个运行时刻,系统可能会耗尽所有资源。资源。v (2) 线程池管理线程池管理v 服务器首先在线程池中创建服务器首先在线程池中创建1个新线程用于等待,每当客个新线程用于等待,每当客户发出请求时,服务器直接将线程池中等待的线程分派给户发出请求时,服务器直接将线程池中
26、等待的线程分派给该客户,而无需为再创建线程而耗费时间。同时,服务器该客户,而无需为再创建线程而耗费时间。同时,服务器还可管理线程池中的线程数,如果太忙,还可以拒绝客户还可管理线程池中的线程数,如果太忙,还可以拒绝客户请求。请求。2012年年2月月29日日10时时35分分Visual C#.NET程序设计教程(第程序设计教程(第2版)版)四川省精品课程四川省精品课程、四川省高等教育质量工程建设项目四川省高等教育质量工程建设项目Email:LFQ第22页人民邮电出版社与电子科技大学成都学院联合打造精品教材vThreadPool类,用于创建和使用线程池。创类,用于创建和使用线程池。创建和使用线程池的
27、方法是:调用建和使用线程池的方法是:调用ThreadPool类的类的QueueUserWorkItem方法,并传递一方法,并传递一个个WaitCallback的委托,在其中封装要添加的委托,在其中封装要添加到队列中的方法到队列中的方法。v操作演示:操作演示: 【实例【实例9-6】v详细代码:见教材详细代码:见教材v运行效果:运行效果:2012年年2月月29日日10时时35分分Visual C#.NET程序设计教程(第程序设计教程(第2版)版)四川省精品课程四川省精品课程、四川省高等教育质量工程建设项目四川省高等教育质量工程建设项目Email:LFQ第23页人民邮电出版社与电子科技大学成都学院联
28、合打造精品教材v9.5.1 异步编程和多线程异步编程和多线程v9.5.2 异步编程模式异步编程模式2012年年2月月29日日10时时35分分Visual C#.NET程序设计教程(第程序设计教程(第2版)版)四川省精品课程四川省精品课程、四川省高等教育质量工程建设项目四川省高等教育质量工程建设项目Email:LFQ第24页人民邮电出版社与电子科技大学成都学院联合打造精品教材v 传统程序在调用一个方法时,需要等待传统程序在调用一个方法时,需要等待该方法该方法执行完成并返执行完成并返回再继续执行后回再继续执行后续续的语句,但如果的语句,但如果被被调用的方法需要执行较调用的方法需要执行较长的时间,程
29、序将长时间的等待。如果希望在该方法没有执长的时间,程序将长时间的等待。如果希望在该方法没有执行完成行完成就就继续执行其它代码。这就需要异步编程。异步编程继续执行其它代码。这就需要异步编程。异步编程的基本思想是:向其它组件发出方法调用,并继续执行其它的基本思想是:向其它组件发出方法调用,并继续执行其它任务,而不用等待调用的操作完成。任务,而不用等待调用的操作完成。v 与与多线程编程多线程编程不同的是不同的是,异步编程异步编程不需要创建不需要创建和管理和管理线程,线程,只需在主线程中发出一个异步调用,而不需要等待异步调用只需在主线程中发出一个异步调用,而不需要等待异步调用返回即可继续执行其它操作。
30、如果需要返回异步调用结果,返回即可继续执行其它操作。如果需要返回异步调用结果,则通过回调、轮询等方式来获得。则通过回调、轮询等方式来获得。v 因为异步调用由主线程发起,且独立于主线程之外单独执行因为异步调用由主线程发起,且独立于主线程之外单独执行,不但达到了多线程的效果,而且还避免了多线程的同步问,不但达到了多线程的效果,而且还避免了多线程的同步问题。因此,使用异步编程来执行多个任务要更简便些。题。因此,使用异步编程来执行多个任务要更简便些。2012年年2月月29日日10时时35分分Visual C#.NET程序设计教程(第程序设计教程(第2版)版)四川省精品课程四川省精品课程、四川省高等教育质量工程建设项目四川省高等教育质量工程建设项目Email:LFQ第25页人民邮电出版社与电子科技大学成都学院联合打造精品教材v 异步编程一般分有两个逻辑部份:客户端调用开始方法并异步编程一般分有两个逻辑部份:客户端调用开始方法并提供参数,从而启动异步操作;客户端通过调用结束方法提供参数,从而启动异步操作;客户端通过调用结束方法,来获取异步操作的结果,来获取异步操作的结果。v 1开始异步操作开始异步操作:此时,可通过:此
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 半导体封装设计行业营销策略方案
- 商品和服务的质量控制行业相关项目经营管理报告
- 性别平等心理咨询热线服务行业市场调研分析报告
- 助产士服务行业营销策略方案
- 寄宿学校教育服务行业营销策略方案
- 气量计计量仪器产品供应链分析
- 声音传送装置用话筒挑杆产品供应链分析
- 科学用棱镜细分市场深度研究报告
- 蛋糕铲细分市场深度研究报告
- 托管网站行业营销策略方案
- 引水工程施工设计方案
- 四氢呋喃项目可行性研究报告-用于立项备案
- 部编版《道德与法治》五年级下册第8课《推翻帝制 民族觉醒》优质课件
- Q∕GDW 11514-2021 变电站智能机器人巡检系统检测规范
- 基坑支护工程(技术标图文)
- 汽车美容装饰行业员工提成方案
- 打印纸购销合同(最新完整版)
- 布缆船操作规程
- 鸿业市政道路9.0实例教学视频课程
- 食品快检结果记录表
- 德国有限责任公司章程GmbHSatzung
评论
0/150
提交评论