第6章 线程教材_第1页
第6章 线程教材_第2页
第6章 线程教材_第3页
第6章 线程教材_第4页
第6章 线程教材_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第六章线程C#程序设计实用教程学习目标线程123进程线程同步4线程概述多任务

多任务是指操作系统一次运行多个应用程序的能力。例如,当同时代开MICROSOFTWORD窗口和QQ聊天窗口。可以在系统面板看到后台还运行了其他的应用程序。当来回切换应用程序时,就可以看出在同一时刻,所有这些应用程序都在执行着。多任务有两种不同的风格:协作式多任务和抢先式多任务机制线程概述进程

当启动应用程序时,系统就会为该应用程序分配所需要的内存以及其他资源。内存和资源的物理分析叫做进程。当然,应用程序可以启动多个进程。线程

线程包含了一个计算机执行传统程序时所做的每一件事情。每个进程都有一个由计算机的处理器使用的执行次序,这个执行次序就成为线程。

多线程

在同一时间执行多个任务的功能,称为多线程多线程的优点:可以同时完成多个任务;可以使程序的响应速度更快;可以让占用大量处理时间的任务或当前没有进行处理的任务定期将处理时间让给别的任务;可以随时停止任务;可以设置每个任务的优先级以优化程序性能。主要缺点:对资源的共享访问可能造成冲突(对共享资源的访问进行同步或控制);程序的整体运行速度减慢等等。Thread类Thread类:(实现线程的主要方法)一个Thread实例管理一个线程,即执行序列。通过简单实例化一个Thread对象,就可以创建一个线程,然后通过Thread对象提供的方法对线程进行管理。Thread类的主要属性属性名称说明ApartmentState设置或获取线程的单元状态。CurrentContext该静态属性获得执行线程的当前上下文。CurrentCulture设置或获取当前线程的文化。CurrentThread获取当前正在运行的线程CurrentUICultrure该静态属性获取当前运行的线程。IsAlive在运行期间使用这个属性,它设置或获取由资源管理器使用的当前文化,来查询特定文化的资源。IsBackPoolThread获取一个值,该值指示线程是否属于托管线程池。Name获取或设置线程的名称。Priority获取或设置一个值,该值指示线程的调度优先级。ThreadState获取一个值,该值包含当前线程的状态。Thread类的常用方法属性名称说明Abort终止线程GetDomain返回当前线程正在其中运行的当前域。Interrupt中断处于WaitSleepJoin线程状态的线程。Join阻塞调用线程,直到某个线程终止时为止。ResetAbort取消为当前线程请求的AbortResume继续已挂起的线程。Sleep将当前线程阻塞指定的毫秒数。Start启动线程。Suspend挂起线程,如果线程已经挂起,该方法不起作用

线程的建立与启动

新建一个线程的过程:只需将其声明并为其提供线程起始点处的方法委托,再用Thread.Start()方法启动该线程

(1)声明Threada;(2)实例化a=newThread(newThreadStart(b));

其中,b为新建过程中执行的过程名。(3)调用Thread.Start()方法启动该线程a.Start();

这里将介绍一个简单的创建线程的例子,其并不是解释为什么使用线程。创建一个心得控制台应用程序,命名文件为NewThread.cs,添加以下代码。

线程的优先级

线程是根据其优先级来调度的,每个线程都有特定的优先级。每个线程在创建时其优先级为:ThreadPriority.Normal可以使用ThreadPriority枚举改变线程的优先级。线程的优先级定义为ThreadPriority枚举类型名称说明Highest将线程安排在具有任何其他优先级的线程之前AboveNormal将线程安排在具有Highest优先级的线程之后,在具有Normal优先级的线程之前Normal将线程安排在具有AboveNormal优先级的线程之后,在具有BelowNormal优先级的线程之前BelowNormal将线程安排在具有Normal优先级的线程之后,在具有Lowest优先级的线程之前Lowest将线程安排在具有任何其他优先级的线程之后线程的同步C#为同步访问变量提供了一个非常简单的方式,即使用C#语言的关键字lock,它可以把一段代码定义为互斥段(criticalsection),互斥段在一个时刻内只允许一个线程进入执行,而其他线程必须等待。在C#中,关键字lock定义如下:

lock(expression){statement_block}

expression代表希望跟踪的对象,通常是对象引用。如果想要保护一个类的实例,一般可以使用this;如果保护一个静态变量(如互斥代码段在一个静态方法内部),一般使用类名就可以了。statement_block就是互斥段的代码,这段代码在一个时刻内只可能被一个线程执行监视器当多线程公用一个对象时,也会出现和公用代码类似的问题,这种问题就不应该使用lock关键字了,这里需要用到System.Threading中的一个类Monitor,我们可以称之为监视器,Monitor提供了使线程共享资源的方案。

Monitor类的主要方法

名称说明Enter在指定对象上获取排他锁

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论