第八讲多线程讲义_第1页
第八讲多线程讲义_第2页
第八讲多线程讲义_第3页
第八讲多线程讲义_第4页
第八讲多线程讲义_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

1、回顾 u调试是搜寻和消除应用程序中的错误的过程u语法错误表示编译器无法理解代码u调试模式可用来重复编译和排除应用程序中的错误,直至能够成功运行u“局部变量”窗口允许用户监控当前程序中所有变量的值u单元测试和集成测试是测试大型应用程序的常用技术u当应用程序遇到运行时错误时,就会引发异常uC# 中的所有异常都派生自 Exception 类目标u理解线程的概念u理解.NET中线程的属性和方法u创建和使用线程u理解线程的特点、优点及使用场合同时执行所有任务,时间更少,效率更高 人 体线程简介读 ,写一览无遗血液循环在同一时间点执行各项进程 编译程序 发送/接收邮件 打印文件 其他操作系统允许计算机同时

2、执行多项操作程序(进程)线程简介程序 1 程序 2线程 1线程 2线程 3线程 1线程 2线程 3单独的执行路径线程简介在以下情况中可能要使用到多线程: l程序需要同时执行两个或多个任务l程序要等待某事件的发生,例如用户输入、文件操作、网络操作、搜索等l后台程序System.Threading 命名空间 2-1 System.Threading 命名空间 2-2System.DelegateSystem. MulticastDelegateThreadStart System.ValueTypeSystem.EnumThreadPriority System.ObjectSystem.Thre

3、adingThread 类的属性和方法 2-1引用System.Threading 命名空间Thread 线程实例名 = new Thread(new ThreadStart(方法名);运行在线程上的方法只创建但不启动线程只创建但不启动线程线程实例名.Start();Thread 类的属性和方法属性属性CurrentThreadIsAliveNamePriorityThreadState方法方法Sleep()Abort()Join()Resume()Start() Suspend()静态静态线程的生命周期在 I/O 操作期间线程被阻止线程已创建但并未启动线程已启动I/O 操作完成后运行线程被阻

4、止,另一个操作正在进行提前中断或特地停止线程暂时中断的线程 线程已恢复示例class SimpleThreadDemo static void Main(string args) Thread.CurrentThread.Name = “主线程;Thread objThread = new Thread(new ThreadStart(ActionMethod);objThread.Name = “子线程; /启动子线程, 并为该线程执行 ActionMethodobjThread.Start();/这将为主线程执行 ActionMethodActionMethod(); static voi

5、d ActionMethod() for(int count = 1; count = 10 ; count+) Console.WriteLine(“线程名: + Thread.CurrentThread.Name); 实例化 objThread 线程并开始执行 ActionMethod()将由应用程序线程执行输出结果混乱锁定机制程序线程1 1线程2 2共享资源 锁定机制保证每次只有一个线程可以访问共享资源缓冲和隔离示例class ThreadLockDemostatic void Main()Thread.CurrentThread.Name = “主线程;ThreadLockDemo o

6、bjDemo = new ThreadLockDemo();Thread newThread = new Thread(new ThreadStart(objDemo.DoTask);newThread.Name = “子线程;newThread.Start();objDemo.DoTask();void DoTask()lock(this)for(int count = 1; count =4990; index-) Console.WriteLine(index); static void Main(string args)Thread objThreadOne = new Thread(

7、new ThreadStart(TaskOne);Thread objThreadTwo = new Thread(new ThreadStart(TaskTwo);objThreadOne.Start();objThreadTwo.Start();static void TaskOne() for(int count=1;count=5;count+) Console.WriteLine(count*2); 无优先级线程,同时执行,输出无序.示例static void Main(string args) Thread.CurrentThread.Name = “主线程; Thread obj

8、ThreadOne = new Thread(new ThreadStart(TaskOne); objThreadOne.Name = “子线程 1; Thread objThreadTwo = new Thread(new ThreadStart(TaskTwo); objThreadTwo.Name = “子线程 2; / 这将启动子线程 objThreadOne.Start(); objThreadTwo.Start(); objThreadTwo.Priority = ThreadPriority.Highest;将在执行第一个线程前执行 objThreadTwo线程安全性q 线程安

9、全性就是保护类的成员和代码的安全,从而使它们不会同时被几个线程中断q 如果类中的成员和代码受到保护而不会被几个线程中断,则这个类称为线程安全的类void DoTask()lock(this).应用程序示例演示多线程计算的应用程序应用程序示例/lock(this)long sum = long.Parse(txtOutput.Text);sum += result;txtOutput.Text = sum.ToString();演示输出结果应用程序示例思考:思考:1.为何100个线程所消耗的时间比一个线程消耗的时间要长?2.对于游戏,不同的动作(例如跑步和射击)会真的采用线程来描述吗? 如果不采用线程,你知道哪些方案?作业u进程和线程有什么区别?u2个线程。线程1从1循环到10000,线程2从1循环到20000,结果分别在其下控制台中显示。 作业u编写一个基于Windows窗体的应用程序,实现打字练习的功能,要使用多线程,在主线程里用Timer控件定时产生Label控件,每个Label控件显示一个随机产生的字母,每

温馨提示

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

评论

0/150

提交评论