多线程程序设计.ppt

  1. 1、本文档共76页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Xueping Shen java多线程程序设计 shenxueping@buaa.edu.cn 主要知识点 线程的概念 线程的调度 创建和启动线程 Thread线程类、 Runnable接口 多个线程的同步 线程之间的通信 多线程 程序:是一段静态的代码,它是应用程序执行的蓝本。 进程:是程序的一次动态执行过程,它对应了从代码加载、执行到执行完毕的一个完整过程,也是进程本身从产生、发展至消亡的过程。 目前所流行的操作系统中,大部分都是支持多任务的(如Windows 3.X,Windows NT,Windows 95,OS/2及UNIX的各个版本),这实际就是一种多进程的概念——每一个任务就是一个进程。 线程:比进程更小的执行单位。一个进程在执行过程中,为了同时完成多项操作,可以产生多个线程,形成多条执行线索。每个线程都有它自身的产生、存在和消亡的过程。 线程和进程之间的关系: 多进程环境中每一个进程既包括其所要执行的指令, 也包括执行指令所需的任何系统资源, 如CPU、内存空间、I/O端口等,不同进程所占用的系统资源相对独立; 线程是比进程单位更小的执行单位,多线程环境中每一个线程都隶属于某一进程,由进程触发执行,在系统资源的使用上,属于同一进程的所有线程共享该进程的系统资源; 与进程不同的是线程本身即没有入口,也没有出口,其自身也不能独立运行,它栖身于某个进程之中,由进程启动运行,完成其任务后,自动终止,也可以由进程使之强制终止。 多线程程序设计: 是指单个程序包含并发执行的多个线程。当多线程程序执行时,该程序对应的进程中就有多个控制流在同时执行,即具有并发执行的多个线程; 例如: PV操作 Web Server接受客户端的请求问题 银行问题 网络聊天(一对多)程序 为什么要使用多线程? 由于线程在程序内部,多个线程共享一些系统的开销,而线程本身的数据通常只有微处理器的寄存器数据,以及一个供程序执行时使用的堆栈。 例如线程之间共享相同的内存单元(代码和数据),因此在线程间切换,不需要很大的系统开销,所以线程之间的切换速度远远比进程之间快,线程之间的通信也比进程通信快的多。 多个线程轮流抢占CPU资源而运行时,从微观上讲,一个时间里只能有一个作业被执行,在宏观上可使多个作业被同时执行,即等同于要让多台计算机同时工作,使系统资源特别是CPU的利用率得到提高,从而可以提高整个程序的执行效率。 线程运行环境 线程的调度(1) 微观上,在一台只具有一个CPU的机器上,CPU在同一时间只能分配给一个线程做一件事。 当有多于一个的线程工作时,在Java中,线程调度通常是抢占式(即哪一个线程先抢到CPU资源则先运行),而不是分时间片式。 一旦一个线程获得执行权,这个线程将持续运行下去,直到它运行结束或因为某种原因而阻塞,或者有另一个高优先级线程就绪(这种情况称为低优先级线程被高优先级线程所抢占)。 线程的调度(2) 所有被阻塞的线程按次序排列,组成一个阻塞队列。例如: 因为需要等待一个较慢的外部设备,例如磁盘或用户。 让处于运行状态的线程调用Thread.sleep()方法。 让处于运行状态的线程调用另一个线程的join()方法。 所有就绪但没有运行的线程则根据其优先级排入一个就绪队列。 当CPU空闲时,如果就绪队列不空,就绪队列中第一个具有最高优先级的线程将运行。 当一个线程被抢占而停止运行时,它的运行态被改变并放到就绪队列的队尾; 一个被阻塞(可能因为睡眠或等待I/O设备)的线程就绪后通常也放到就绪队列的队尾。 线程的调度与优先级 线程的调度是按: 其优先级的高低顺序执行的; 同样优先级的线程遵循“先到先执行的原则”; 线程优先级:范围 1~10 (10 级)。数值越大,级别越高 Thread 类定义的 3 个常数: MIN_PRIORITY 最低(小)优先级(值为1) MAX_PRIORITY 最高(大)优先级(值为10) NORM_PRIORITY 默认优先级(值为5) 线程创建时,继承父线程的优先级。 常用方法: getPriority( ):获得线程的优先级 setPriority( ):设置线程的优先级 ThreadPri.java 主线程 主线程: main( ) 方法——Application 应用程序 每当用java命令启动一个Java虚拟机进程( Application 应用程序),Java虚拟机就会创建一个主线程,该线程从程序入口main()方法开始执行。 浏览器中加载的 Applet 主类——Applet 小程序 多线程:在主线程中创建 Thread 类或其子类对象时,就创建了一个线程对象。Programmer可以控制线程的启动、挂起与终止。 线程的状态 在一个多线程运行环境中运行的线

文档评论(0)

ebitjij + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档