教学-多线程幻灯片

上传人:m****5 文档编号:51731388 上传时间:2018-08-16 格式:PPT 页数:70 大小:5.07MB
返回 下载 相关 举报
教学-多线程幻灯片_第1页
第1页 / 共70页
教学-多线程幻灯片_第2页
第2页 / 共70页
教学-多线程幻灯片_第3页
第3页 / 共70页
教学-多线程幻灯片_第4页
第4页 / 共70页
教学-多线程幻灯片_第5页
第5页 / 共70页
点击查看更多>>
资源描述

《教学-多线程幻灯片》由会员分享,可在线阅读,更多相关《教学-多线程幻灯片(70页珍藏版)》请在金锄头文库上搜索。

1、java多线线程程序设计设计l 程序、进程、线程 l 多任务、多进程、多线程l Java对多线程的支持、Java主线程l Java中创建线程的方法l 线程休眠过程l 线程的生命周期l 线程的调度和优先级内 容 提 要 程序、进程 v 程序:计算机指令的集合,一段静态的代码,是应用软 件执行的蓝本。它以文件的形式存储在磁盘上。 v 进程:一个独立程序的每一次运行称为一个进程,是程 序的一次动态执行过程,它对应了从代码加载、执行到 执行完毕的一个完整过程,这个过程也是进程本身从产 生、发展到消亡的过程。作为执行蓝本的同一段程序可 以被多次加载到系统的不同内存区域分别执行,形成不 同的进程。例如:n

2、用word编辑文稿时,同时在另一个窗口下载音乐,这两个独立的 程序在同时运行,称为两个进程。n一个应用程序的执行(如java程序)也对应于一个进程。n操作系统周期性的将CPU切换到不同的任务,分时间片轮流运行 每一个进程,而每一个进程都像是连续运行的。每一个进程占有 自己的内存空间。线程v线程:比进程更小的执行单位,一个进程在其执 行过程中可以产生多个线程,形成多条执行线索 ,每条线索即每个线程也有它自身的产生、存在 和消亡的过程,也是一个动态的过程。 v日常生活中的程序、进程和线程:n程序:每学期的课程表n进程:每学期的教学活动n线程:每门课的教学过程 v一个程序运行后至少有一个进程,一个进

3、程里可 以包含多个线程,但至少要包含一个线程。单线程v早期在计算机上开发的程序大多是单线程的,就是一个程序只有一条从头到尾的执行线索。v我们之前编写的程序都是单线程程序,每个程序都有一个入口、一个出口以及一个顺序执行的序列,在程序执行过程中的任何指定时刻,都只有一个单独的执行点。多线程v 多线程是一个进程中多段代码同时并发执行,是指程序中包含多条执行路径。在一个程序中同时运行多个不同的线程来执行不同的任务,即允许单个程序创建多个并行执行的任务来完成各自的任务。采用多线程,一个进程的若干任务就可以细分为多个部分由多线程来处理,这样可以增强整个程序的吞吐量,加快反应时间。例如:n浏览器程序就是一个

4、多线程的例子, 当下载一个应用程序或图片时,可以同时进行其他任务,例如播放动画或声音的应用程序、打印某些内容、进行排序或者其他工作。n聊天室(多人同时聊天)v 在现实生活中,很多的过程都具有多条线索同时动作的特性,例如,我们可以一边走路,一边接电话,两件事并行。如果不允许这样做,我们会感觉很难受。单线程程序多线程程序一 个 线 程两个线程多线程多线程和传统的单线程在程序设计上最大的区别在于,由于各个线程的控制流彼此独立,使得各个线程之间的代码是乱序执行的。 l 程序、进程、线程 l 多任务、多进程、多线程l Java对多线程的支持、Java主线程l Java中创建线程的方法l 线程休眠过程l

5、线程的生命周期l 线程的调度和优先级内 容 提 要 多任务、多进程、多线程v 多线程和多任务是两个既有联系又有区别的概念:n多任务是针对操作系统而言的,代表着操作系统可以同时运行多 个应用程序(多进程),例如我们可以利用计算机边听音乐,边 浏览网页,或者从网络上下载东西,等等。以前古老的DOS操作 系统(V 6.22)是单任务的,还没有线程的概念,系统在每次只 能做一件事情。比如你在copy东西的时候不能rename文件名。为 了提高系统的利用效率,采用批处理来批量执行任务。n现在的操作系统都是多任务操作系统,每个运行的任务就是操作 系统所做的一件事情,比如你在听歌的同时还在用MSN和好友聊

6、天。听歌和聊天就是两个任务,这个两个任务是“同时”进行的 。一个任务一般对应一个进程,也可能包含好几个进程。比如运 行的MSN就对应一个MSN的进程,如果你用的是windows系统,你 就可以在任务管理器中看到操作系统正在运行的进程信息。多任务、多进程、多线程v 多线程是针对一个程序而言的,代表着一个程序内部可 以同时执行线程的个数,而每个线程可以完成不同的任 务。 v 一般来说,当运行一个应用程序的时候,就启动了一个 进程,当然有些会启动多个进程。启动进程的时候,操 作系统会为进程分配资源,其中最主要的资源是内存空 间,因为程序是在内存中运行的。在进程中,有些程序 流程块是可以乱序执行的,并

7、且这个代码块可以同时被 多次执行。实际上,这样的代码块就是线程体。线程是 进程中乱序执行的代码流程。当多个线程同时运行的时 候,这样的执行模式成为并发执行。 v 多线程的目的是为了最大限度的利用CPU资源。多任务、多进程、多线程v对于一个进程中的多个线程来说,多个线程共享 进程的内存块,当有新的线程产生的时候,操作 系统不分配新的内存,而是让新线程共享原有的 进程块的内存。因此,线程间的通信很容易,速 度也很快。不同的进程因为处于不同的内存块, 因此进程之间的通信相对困难。 v实际上,操作的系统的多进程实现了多任务并发 执行,程序的多线程实现了进程的并发执行。多 任务、多进程、多线程的前提都是

8、要求操作系统 提供多任务、多进程、多线程的支持。多任务、多进程、多线程v归纳起来,操作系统可以同时执行多个任务,每 个任务就是进程,进程可以同时执行多个任务, 每个任务就是线程。l 程序、进程、线程 l 多任务、多进程、多线程l Java对多线程的支持、Java主线程l Java中创建线程的方法l 线程休眠过程l 线程的生命周期l 线程的调度和优先级内 容 提 要 Java对多线程的支持v 很多程序语言都是利用外部的线程软件包来实现多线程。如C语言。 v Java是第一个支持内置线程操作的主流编程语言。Java语言的一大 特性就是内置对多线程的支持。多线程指同时存在几个执行体,按 几条不同的执

9、行线索共同工作的情况,它使得编程人员可以很方便 地开发出具有多线程功能、能同时处理多个任务的功能强大的应用 程序。 v 虽然执行线程给人一种几个事件同时发生的感觉,但这只是一种错 觉,因为我的计算机在任何给定的时刻只能执行那些线程中的一个 ,为了建立这些线程正在同步执行的感觉,java快速地把控制从一 个线程切换到另外一个线程多个线程的执行是并发的,也是一种逻 辑上的“同时”,而不是物理上的“同时”。如果系统只有一个CPU ,那么真正的“同时”是不可能的,但是由于CPU的速度非常快,用 户感觉不到其中的区别,我们也没必要去关心它,只需要设想各个 线程是同时执行的即可。如果系统有多个CPU,可以

10、实现真正的“同 时”执行。 v 在应用程序中使用多线程不会增加CPU的数据处理能力。Java主线程v 一般常见的Java应用程序都是单线程的。比如,用java 命令运行一个最简单的HelloWorld的Java应用程序时, 就启动了一个JVM进程,JVM找到程序程序的入口点 main(),然后运行main()方法,这样就产生了一个线程 ,这个线程称之为“主线程”。 v 当JVM加载代码,发现main方法之后,就会启动一个线程 ,这个线程称作“主线程”,该线程负责执行main方法 。如果main中没有创建其他线程,那么当main方法执行 完最后一条语句,JVM就会结束我们的java应用程序。如

11、果main中又创建了其他线程,那么JVM就要在主线程和其 他线程之间轮流切换,保证每个线程都有机会使用CPU资 源,main方法即使执行完最后的语句,JVM也不会结束我 们的程序,JVM一直等到程序中所有的线程都结束之后, 才结束我们的java应用程序Java主线程多线程的优点多线程的优点 v 使用多线程进行程序设计具有如下优点:1)多线程编程简单,效率高(能直接共享数据和资源, 多进程不能)2)适合于开发服务程序(如Web服务,聊天服务等)3)适合于开发有多种交互接口的程序(如聊天程序的客户 端,网络下载工具)4)减轻编写交互频繁、涉及面多的程序的困难(如监听网 络端口)5)程序的吞吐量会得

12、到改善(同时监听多种设备,如网络 端口、串口、并口以及其他外设)6)有多个处理器的系统,可以并发运行不同的线程(否则 ,任何时刻只有一个线程在运行)l 程序、进程、线程 l 多任务、多进程、多线程l Java对多线程的支持、Java主线程l Java中创建线程的方法l 线程休眠过程l 线程的生命周期l 线程的调度和优先级内 容 提 要 Java中创建线程的方法v Java虚拟机允许应用程序并发地运行多个执行线程。 Java语言提供了多线程编程的扩展点,并给出了功能强 大的线程控制API。 v Java的线程是通过java的软件包java.lang中定义的 Thread类来实现的。 v Java

13、中有两种方法创建线程:n 继承Thread类。n 实现Runnable接口。 v 无论使用哪种方法,都需要用到Java基础类库中的 Thread类及其方法。 v 在Java语言中,线程也是一种对象,但并非任何对象都 可以成为线程,只有实现Runnable接口或继承了Thread 类的对象才能成为线程。Thread类 v public class Thread extends Object implements RunnablenThread类是一个具体的类,即不是抽象类,该类封装 了线程的行为。要创建一个线程,程序员必须创建一 个Thread类的子类。nThread类提供了大量的方法来方便控制

14、各个线程。Thread类的构造方法(1)public Thread():创建一个系统线程类的对象。线 程默认名是Thread-n,n是从0开始递增的整数。 (2)public Thread(String name):在第一个构造方法的 基础上,为所创建的线程对象指定一个字符串名称供以 后使用。 (3)public Thread(Runnable target): 该构造方法包 含 了Runnable类型的参数,它是实现Runnable接口的 类的实例对象,基于该构造方法创建的线程对象,将线 程的业务逻辑交由参数所传递的Runnable对象去实现。 ntarget是实现了Runnable接口的类

15、的target对象。n线程默认名是Thread-n,n是从0开始递增的整数。Thread类的构造方法(4)public Thread(Runnable target,String name):实 现前两个构造方法的功能。 (5)public Thread(ThreadGroup group,Runnable target):生成一 个指定线程组和目标对象的线程。 (6)public Thread(ThreadGroup group,String name): 生成一个指定线程组和名字的线程。 v利用构造方法创建新线程对象之后,这个对象中 的有关数据被初始化,从而进入线程的生命周期 的第一个状态

16、新建状态。Thread类的主要成员方法 方法 功能 CurrentThread( )返回当前运行的Thread对象 start()启动线程 run()由调度程序调用,当run()方法返回时 ,该 线程停止 stop()使调用它的线程立即停止执行 sleep(long n)使线程睡眠n毫秒,n毫秒后,线程可 以再 次运行 suspend()使线程挂起,暂停运行Not Runnable resume()恢复挂起的线程,使处于可运行状态 Runnable yield()将CPU控制权主动移交到下一个可运 行线程Thread类的主要方法(续)setName(String)赋予线程一个名字 getName()取得由setName()方法设置的 线程 名字的字符串 getPriority()返回线程优先级 setPriority(int)设置线程优先级join()当前线程等待调用该方法的 线程结 束后, 再往下执行setDaemon(boolean )设置该线程是daemon线程 还是用户 线程,Daemon线程也称服

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 医学/心理学 > 基础医学

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号