[计算机软件及应用]多线程程序设计课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《[计算机软件及应用]多线程程序设计课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机软件及应用 计算机软件 应用 多线程 程序设计 课件
- 资源描述:
-
1、Xueping SXueping Shen2想象一下,如果我们想要从想象一下,如果我们想要从InternetInternet上下载一上下载一段很长的视频或者音频片段,如果我们可以把段很长的视频或者音频片段,如果我们可以把下载任务放在一个独立的线程里实现,我们在下载任务放在一个独立的线程里实现,我们在下载开始之后很快就可以观看这个片段了,而下载开始之后很快就可以观看这个片段了,而不是必须等全部下载完成才可以观看。不是必须等全部下载完成才可以观看。此外,多线程的执行还可以允许许多用户同时此外,多线程的执行还可以允许许多用户同时访问一个公共的数据库,这个特性对于类似库访问一个公共的数据库,这个特性对
2、于类似库存管理和机票预定这样的系统有时候显得非常存管理和机票预定这样的系统有时候显得非常有用。有用。为了防止由于多个用户同时读取和写入公共数为了防止由于多个用户同时读取和写入公共数据库而造成的数据破坏,多线程还需要在对象据库而造成的数据破坏,多线程还需要在对象上设置锁。这样一个时刻只有一个线程能够修上设置锁。这样一个时刻只有一个线程能够修改一个对象的状态。改一个对象的状态。Xueping Shen3如何实践对正在下载的视频进行同时观看;机票预订;并发的处理。Xueping Shen4线程的概念线程的概念线程的调度线程的调度创建和启动线程创建和启动线程ThreadThread线程类、线程类、Ru
3、nnableRunnable接口接口多个线程的同步多个线程的同步线程之间的通信线程之间的通信Xueping Shen5程序:程序:是一段静态的代码,它是应用程序执行的蓝本。是一段静态的代码,它是应用程序执行的蓝本。进程:进程:是程序的一次动态执行过程,它对应了从代码加是程序的一次动态执行过程,它对应了从代码加载、执行到执行完毕的一个完整过程,也是进程本身从载、执行到执行完毕的一个完整过程,也是进程本身从产生、发展至消亡的过程。产生、发展至消亡的过程。目前所流行的操作系统中,大部分都是支持多任务的目前所流行的操作系统中,大部分都是支持多任务的(如如Windows 3.XWindows 3.X,W
4、indows NTWindows NT,Windows 95Windows 95,OS/2OS/2及及UNIXUNIX的的各个版本各个版本),这实际就是一种,这实际就是一种多进程多进程的概念的概念每一个任每一个任务就是一个务就是一个。线程:线程:比进程更小的执行单位。比进程更小的执行单位。一个进程在执行过程中,一个进程在执行过程中,为了同时完成多项操作,可以产生多个线程,形成多条为了同时完成多项操作,可以产生多个线程,形成多条执行线索。每个线程都有它自身的产生、存在和消亡的执行线索。每个线程都有它自身的产生、存在和消亡的过程。过程。Xueping Shen6多进程多进程环境中每一个进程既包括其
5、所要执行的指环境中每一个进程既包括其所要执行的指令令,也包括执行指令所需的任何系统资源也包括执行指令所需的任何系统资源,如如CPUCPU、内存空间、内存空间、I/OI/O端口等端口等,不同进程所占用的系统资不同进程所占用的系统资源相对独立;源相对独立;线程是比进程单位更小的执行单位,多线程环境线程是比进程单位更小的执行单位,多线程环境中每一个线程都隶属于某一进程中每一个线程都隶属于某一进程,由进程触发执行由进程触发执行,在系统资源的使用上在系统资源的使用上,属于同一进程的所有线程共属于同一进程的所有线程共享该进程的系统资源;享该进程的系统资源;与进程不同的是线程本身即没有入口,也没有与进程不同
6、的是线程本身即没有入口,也没有出口,其自身也不能独立运行,它栖身于某个出口,其自身也不能独立运行,它栖身于某个进程之中,由进程启动运行,完成其任务后,进程之中,由进程启动运行,完成其任务后,自动终止,也可以由进程使之强制终止。自动终止,也可以由进程使之强制终止。Xueping Shen7多线程程序设计:多线程程序设计:是指单个程序包含是指单个程序包含的多个线程。当多的多个线程。当多线程程序执行时,该程序对应的进程中就有多线程程序执行时,该程序对应的进程中就有多个控制流在同时执行,个控制流在同时执行,即具有并发执行的多个即具有并发执行的多个线程;线程;例如:例如:PV操作操作Web Server
7、接受客户端的请求问题接受客户端的请求问题银行问题银行问题网络聊天网络聊天(一对多一对多)程序程序Xueping Shen8一个多线程的例子一个多线程的例子:Test.javaTest.java此程序创建两个线程,分别执行存取款操作,并规定此程序创建两个线程,分别执行存取款操作,并规定每次存款每次存款2500025000元,每次取款元,每次取款5000050000元。元。Xueping Shen9进程、线程示意图进程、线程示意图 Xueping Shen10由于线程在程序内部,多个线程共享一些系统的开销,由于线程在程序内部,多个线程共享一些系统的开销,而而线程本身的数据通常只有微处理器的寄存器数
8、据,以及一线程本身的数据通常只有微处理器的寄存器数据,以及一个供程序执行时使用的堆栈。个供程序执行时使用的堆栈。例如线程之间共享相同的内例如线程之间共享相同的内存单元存单元(代码和数据代码和数据),因此在线程间切换,不需要很大的,因此在线程间切换,不需要很大的系统开销,系统开销,所以线程之间的切换速度远远比进程之间快,所以线程之间的切换速度远远比进程之间快,线程之间的通信也比进程通信快的多。线程之间的通信也比进程通信快的多。多个线程轮流抢占多个线程轮流抢占CPUCPU资源而运行时,资源而运行时,从从微观微观上讲,一个时上讲,一个时间里只能有一个作业被执行,在间里只能有一个作业被执行,在宏观宏观
9、上可使多个作业被同上可使多个作业被同时执行,即等同于要让多台计算机同时工作,时执行,即等同于要让多台计算机同时工作,使系统资源使系统资源特别是特别是CPUCPU的利用率得到提高,从而可以提高整个程序的执的利用率得到提高,从而可以提高整个程序的执行效率。行效率。Xueping Shen11Virtual CPUCodeDataThread txyz rclass xyz线程线程Xueping Shen121.1.每一个进程就是一个应用程序。有自己的入口和出口。每一个进程就是一个应用程序。有自己的入口和出口。2.2.多进程多进程环境中每一个进程既包括其所要执行的指令环境中每一个进程既包括其所要执行
10、的指令,也包括也包括了执行指令所需的任何系统资源了执行指令所需的任何系统资源,如如CPUCPU、内存空间、内存空间、I/OI/O端端口等口等;3.3.不同进程所占用的系统资源相对独立。不同进程所占用的系统资源相对独立。1.1.多个线程可共同存在于一个应用程序中。多个线程可共同存在于一个应用程序中。2.2.多线程多线程环境中每一个线程都环境中每一个线程都隶属于某一进程隶属于某一进程,由进程触发执由进程触发执行(没有自己的入口和出口)行(没有自己的入口和出口);3.3.在系统资源的使用上在系统资源的使用上,属于同一进程的所有线程共享该进程属于同一进程的所有线程共享该进程的系统资源。的系统资源。线程
11、之间切换的速度比进程切换要快得多线程之间切换的速度比进程切换要快得多。进程和线程的比较(总结)进程和线程的比较(总结)Xueping Shen13线程的调度(线程的调度(1 1)微观上,在一台只具有一个微观上,在一台只具有一个CPUCPU的机器上,的机器上,CPUCPU在同一在同一时间只能分配给一个线程做一件事。时间只能分配给一个线程做一件事。当有多于一个的线程工作时,在当有多于一个的线程工作时,在JavaJava中,线程调度通中,线程调度通常是常是,。一旦一个线程获得执行权,这个线程将持续运行下去,一旦一个线程获得执行权,这个线程将持续运行下去,直到它运行结束或因为某种原因而阻塞,或者有另一
12、直到它运行结束或因为某种原因而阻塞,或者有另一个高优先级线程就绪(个高优先级线程就绪()。)。Xueping Shen14线程的调度(线程的调度(2 2)所有被阻塞的线程按次序排列,组成一个阻塞队列。例所有被阻塞的线程按次序排列,组成一个阻塞队列。例如如:因为需要等待一个较慢的外部设备,例如磁盘或用户。因为需要等待一个较慢的外部设备,例如磁盘或用户。让处于运行状态的线程调用让处于运行状态的线程调用Thread.sleep()Thread.sleep()方法。方法。让处于运行状态的线程调用另一个线程的让处于运行状态的线程调用另一个线程的join()join()方法。方法。所有就绪但没有运行的线程
13、则根据其优先级排入一个就所有就绪但没有运行的线程则根据其优先级排入一个就绪队列。绪队列。当当CPUCPU空闲时,如果就绪队列不空,就绪队列中第一个具空闲时,如果就绪队列不空,就绪队列中第一个具有最高优先级的线程将运行。有最高优先级的线程将运行。当一个线程被抢占而停止运行时,它的运行态被改变并当一个线程被抢占而停止运行时,它的运行态被改变并放到就绪队列的队尾;放到就绪队列的队尾;一个被阻塞(可能因为睡眠或等待一个被阻塞(可能因为睡眠或等待I/OI/O设备)的线程就绪设备)的线程就绪后通常也放到就绪队列的队尾。后通常也放到就绪队列的队尾。Xueping Shen15线程的调度是按:线程的调度是按:
14、1.其优先级的高低顺序执行的;其优先级的高低顺序执行的;2.同样优先级的线程遵循同样优先级的线程遵循“先到先执行的原则先到先执行的原则”;线程优先级线程优先级:范围:范围 110 110(10 10 级)。数值越大,级别越高级)。数值越大,级别越高Thread Thread 类定义的类定义的 3 3 个常数:个常数:MIN_PRIORITY MIN_PRIORITY 最低最低(小小)优先级(值为优先级(值为1 1)MAX_PRIORITY MAX_PRIORITY 最高最高(大大)优先级(值为优先级(值为1010)NORM_PRIORITY NORM_PRIORITY 默认优先级(值为默认优先
15、级(值为5 5)线程创建时,继承父线程的优先级。线程创建时,继承父线程的优先级。常用方法:常用方法:getPrioritygetPriority()():获得线程的优先级:获得线程的优先级setPrioritysetPriority()():设置线程的优先级:设置线程的优先级ThreadPriThreadPri.java.javaXueping Shen16Xueping Shen17主线程主线程主线程主线程:main()main()方法方法Application Application 应用程序应用程序每当用每当用javajava命令启动一个命令启动一个JavaJava虚拟机进程虚拟机进程(
16、Application Application 应用程序),应用程序),JavaJava虚拟机就会虚拟机就会创建一个主线程,该线程从程序入口创建一个主线程,该线程从程序入口main()main()方法方法开始执行。开始执行。浏览器中加载的浏览器中加载的 Applet Applet 主类主类Applet Applet 小程序小程序多线程多线程:在主线程中创建在主线程中创建 Thread Thread 类或其子类类或其子类对象时,就创建了一个线程对象。对象时,就创建了一个线程对象。ProgrammerProgrammer可以控制线程的启动、挂起与终止。可以控制线程的启动、挂起与终止。Xueping
17、 Shen18public class Sample public void method1(String str)System.out.println(str);public void method2(String str)method1(str);public static void main(String args)Sample s=new Sample();s.method2(hello);main()方法方法method1()方法方法method2()方法方法主线程的方法调用栈主线程的方法调用栈当我们运行java Sample命令时,java虚拟机会给每个线程分配方方法调用栈,用于跟
18、踪每个线程调用方法的信息,同时方法调用栈法调用栈,用于跟踪每个线程调用方法的信息,同时方法调用栈还用做线程的工作区,方法局部变量会存放到方法调用栈中还用做线程的工作区,方法局部变量会存放到方法调用栈中Xueping Shen19在一个多线程运行环境中运行的线程可以有多种状态在一个多线程运行环境中运行的线程可以有多种状态,也也就是说一个线程在不同时刻会处于下列状态之一就是说一个线程在不同时刻会处于下列状态之一:新建、就绪、运行、阻塞、终止;新建、就绪、运行、阻塞、终止;BlockedBlocked终止终止新生成新生成一个线程一个线程RunnableRunnableRunningRunningst
19、art()start()yield()yield()notify()notify()wait(),sleep(),join()wait(),sleep(),join()Xueping Shen20新建新建:当一个:当一个 Thread Thread 类或其子类对象被创建时,新类或其子类对象被创建时,新产生的线程处于新建状态,此时它已经有了相应的内产生的线程处于新建状态,此时它已经有了相应的内存空间和其他资源。如:存空间和其他资源。如:Thread myThread=new Thread myThread=new MyThreadClassMyThreadClass();();就绪就绪:调用:调
20、用 start()start()方法来启动处于新建状态的线方法来启动处于新建状态的线程后,将进入线程队列排队等待程后,将进入线程队列排队等待 CPU CPU 服务,此时它已服务,此时它已经具备了运行的条件,经具备了运行的条件,一旦轮到它来享用一旦轮到它来享用 CPU CPU 资源时,资源时,就可以脱离创建它的主线程,开始自己的生命周期。就可以脱离创建它的主线程,开始自己的生命周期。运行运行:当就绪状态的线程被调度并获得处理器资源时,:当就绪状态的线程被调度并获得处理器资源时,便进入运行状态。便进入运行状态。每一个每一个 Thread Thread 类及其子类的对象类及其子类的对象都有一个重要的
21、都有一个重要的 run()run()方法,当线程对象被调用执方法,当线程对象被调用执行时,它将自动调用本对象的行时,它将自动调用本对象的 run()run()方法,从第一方法,从第一句开始顺序执行。句开始顺序执行。Run()Run()方法定义了这个线程的操作方法定义了这个线程的操作和功能。和功能。Xueping Shen21阻塞:一个正在执行的线程暂停自己的执行而进入的阻塞:一个正在执行的线程暂停自己的执行而进入的状态。状态。引起线程由运行状态进入阻塞状态的可能情况:引起线程由运行状态进入阻塞状态的可能情况:该线程正在等待该线程正在等待 I/O I/O 操作的完成操作的完成调用了该线程的调用了
22、该线程的 sleep()sleep()方法方法调用了调用了 wait()wait()方法方法让处于运行状态的线程调用另一个线程的让处于运行状态的线程调用另一个线程的join()join()方方法法Xueping Shen22对应于不同进入阻塞状态的情况,采取不同的方对应于不同进入阻塞状态的情况,采取不同的方法使其回到就绪状态:法使其回到就绪状态:I/O I/O 操作:等待这个操作:等待这个 I/O I/O 操作完成后;操作完成后;sleep()sleep()方法:等待其指定的休眠事件结束后,方法:等待其指定的休眠事件结束后,自动脱离阻塞状态;自动脱离阻塞状态;调用调用 wait()wait()
23、方法:调用方法:调用 notify()notify()或或 notifyAll()notifyAll()方法;方法;Xueping Shen23终止:终止:自然终止:自然终止:线程完成了自己的全部工作线程完成了自己的全部工作强制终止:强制终止:在线程执行完之前,调用在线程执行完之前,调用 stop()stop()或或 destroy()destroy()方法终止线程方法终止线程Xueping Shen24创建状态创建状态可运行状态可运行状态阻塞状态阻塞状态终止状态终止状态Start()Run()结束结束Stop()Stop()I/O受阻受阻Suspend()Wait()Sleep()Sleep
24、()结束结束Notify()Resume()I/O完成完成Xueping Shen25JavaJava中的多线程是建立在中的多线程是建立在ThreadThread类类,Runnable,Runnable接口接口的的基础上的基础上的,通常有两种办法让我们来创建一个新的线,通常有两种办法让我们来创建一个新的线程:程:创建一个创建一个ThreadThread类类,或者一个或者一个ThreadThread子类的对象;子类的对象;创建一个实现创建一个实现RunnableRunnable接口的类的对象;接口的类的对象;Xueping Shen26Thread的构造方法的构造方法Thread();Threa
展开阅读全文