第8章+多线程-1(课件)-+《算法与程序设计-C#》同步教学(清华大学版).pptx
C#程序设计第8章多线程
2本章目标了解线程的基本操作及概念掌握如何创建线程掌握如何暂停和恢复线程的执行掌握如何休眠线程掌握如何终止线程的执行掌握线程同步处理
3多线程编程技术进程和线程创建多线程★
4同时执行所有任务,时间更少,效率更高人体引入读,写一览无遗血液循环在同一时间点执行各项进程编译程序发送/接收邮件打印文件其他操作系统允许计算机同时执行多项操作程序(进程)
5课堂讨论什么是程序?进程?线程?-程序:存储在存储设备上的数据的有序集合。-进程:正在执行的不同应用程序的一个实例。-线程:操作系统分配处理器时间的基本单元。运行一个程序,就是启动了一个进程线程称为处理器调度的对象而进程是资源分配的对象
6线程简介程序1程序2线程1线程2线程3线程1线程2线程3单独的执行路径多线程在C#应用程序中,第一个线程总是Main()方法,因为第一个线程是由.NET运行库开始执行的,Main()方法是.NET运行库选择的第一个方法。后续的线程由应用程序在内部启动,即应用程序可以创建和启动新的线程。一个进程最少包含一个默认线程,即主线程,还可以包含其他线程,称为辅助线程。
7进程与线程的区别进程(Process)进程就是程序的一次执行活动运行一个程序,就是启动了一个进程线程(Thread)线程是一个程序内部的一条执行路径或一个控制流线程称为处理器调度的对象,而进程是资源分配的对象
8进程的启动和终止引入命名空间System.Diagnostics启动进程:Process.Start()终止进程Process.Start(应用程序名称)静态方法:返回Process对象Process.GetProcessesByName(应用程序名称)p.kill()Process对象Process.Start(应用程序名称,文件名)Process.Start(文件名)//已存在的文件路径名
9进程的启动和终止引入命名空间System.Diagnostics获取当前运行中的进程:获取当前进程的信息:Process[]pall=Process.GetProcesses();Id:进程号ProcessName:进程名称Processpcurrent=Process.GetCurrentProcess();
10多线程编程技术进程和线程创建多线程★
11System.Threading命名空间
12主线程运行环境调用应用程序的入口点(Main方法)时,将创建应用程序主线程。
13线程的创建和启动创建和启动线程方法一:publicThread(ThreadStartstart)方法二:publicThread(ParameterizedThreadStartstart)publicdelegatevoidParameterizedThreadStart(objectobj);publicdelegatevoidThreadStart();委托问题1:线程方法有没有返回值?问题2:如何实现多参数的传递?不能有返回值可以将参数封装到类实现Threadt=newThread(方法名);//.NET2.0后启动线程t.Start()t.Start(object);线程的创建和启动
14Thread类的属性和方法属性CurrentThread获取当前正在运行的线程IsAlive指示当前线程的执行状态Name获取或设置线程的名称Priority获取或设置线程的优先级CurrentContext获取线程其中执行的当前上下文IsBackground指示线程是否为后台线程ThreadState获取或设置线程的当前状态方法Sleep()将当前线程阻塞指定的毫秒数Abort()终止线程,销毁托管线程。引发ThreadAbortExceptionJoin()阻塞调用线程,直到某个线程终止时为止Resume()继续已挂起的线程Start()启动线程Suspend()挂起线程GetDomain返回当前线程正在其中运行的当前域Interrupt中断处于WaitSleepJoin线程状态的线程ResetAbort取消为当前线程请求的Abort
15线程的优先级线程是根据其优先级来调度的,每个线程都有特定的优先级。每个线程在创建时其优先级为:ThreadPriority.Normal线程的优先级定义为ThreadPriority枚举类型,如下表:
16暂停和恢复线程使用Thread.Sleep休眠[单位是毫秒]例Thread.Sleep(3000);线程暂停3秒钟其恢复用Thread.Interrupt()使用Thread.Suspend暂停与Sleep