- 1、本文档共82页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[工学]JAVA5吴进
第五章 Java高级编程 5.1 Java多线程机制 5.2 输入输出流类 5.3 网络编程 5.1 Java多线程机制 Java语言从设计之初,就考虑到对多线程的支持,因而在系统级和语言级均提供了对多线程的支持。 使用多线程的优点就是:当程序中有多个可执行线程时,能够充分利用系统资源,提高程序执行效率。 本小结介绍多线程应用程序的设计方法。 5.1.1基本概念 (一) 1.线程 线程是比进程更小的单位,是应用程序中的一个可执行线索,多线程就是同一个应用程序中有多个可执行线索,它们可以并发执行。 前面介绍的所有例程都是单线程的,即一个应用程序只存在一个可执行线索。在执行过程中,如果某部份代码因为等待某个I/O操作而受阻,则程序的其他部分即使与此无关也不能执行,这样就严重地浪费了CPU资源。多线程机制的提出就是为了解决这个问题。 5.1.1基本概念 (二) 回忆一下多进程并行执行的情况,在CPU上执行的某个进程因为等待某种资源而受阻时,多任务操作系统可以使该进程挂起,而根据某种调度原则启动另外一个不同的进程执行,直到前一进程获得其所需资源,才唤醒该进程,让它继续执行。 这样,在多任务操作系统的调度下,可以让多个进程并行执行,能够较好地利用CPU资源,但仍然难以满足现代应用程序的需要。 例如,需要在同一应用程序中完成声音播放、图像显示、网络文件下载等多项工作,如果使用传统的单线程程序,就只能顺序的逐一实现,而使用多线程方法则可以并发实现。 5.1.1基本概念 (三) 多线程就是同一程序中多个任务的并发实现。它与进程有相似之处,可以动态的生成或销毁等,它们之间的差别主要体现在如下两个方面: 作为基本的执行单元,线程的划分比进程小,因此,支持多线程的系统要比只支持多进程的系统并发程度高。 进程把内存空间作为自己的资源之一,每个进程均有自己的内存单元。线程却共享内存单元,通过共享的内存空间来交换信息,从而有利于提高执行效率。 由于线程划分更小,涉及的资源更少,因而使用更加灵活、方便。 5.1.1基本概念 (四) 2.线程调度与优先级 应用程序中的多个线程能够并发执行,但从系统的内部来看,所有线程仍然是串行的一个一个地执行,那么如何来决定哪一个线程先执行,哪一个线程后执行呢? Java引入了优先级的概念,优先级就是线程获得CPU而执行的优先程度,优先级越高,获得CPU的权力越大,执行的机会越多,执行的时间也越长。 5.1.1基本概念 (五) Java把优先级划分为10级,用1至10的整数表示,数值越大,优先级越高。在创建线程时,可以为线程分配优先级。 在Thread类中定义了三个优先级常量:MIN_PRIORITY, MAX_PRIORITY和NORM_PRIORITY,其值分别为1, 10, 5。 在为线程分配优先级时,其值应该在1至10之间,否则将出错。 如果应用程序没有为线程分配优先级,则Java系统为其赋值为NORM_PRIORITY。 5.1.1基本概念 (六) 调度就是分配CPU资源,确定线程的执行顺序。 Java采用抢占式调度方式,即高优先级线程具有剥夺低优先级线程执行的权力。 如果一个低优先线程正在执行,这时出现一个高优先级线程,那么低优先级线程就只能停止执行,放弃CPU,推回到等待队列中,等待下一轮执行,而让高优先级线程立即执行。 如果线程具有相同的优先级,则按先来先服务的原则调度。 5.1.1基本概念 (七) 理解了Java的抢占式调度策略后,在设计程序时,应该让高优先级线程执行一段时间后,能够交出使用权,放弃CPU。 有两个方法可以达到这一目的: 一是调用sleep()方法,暂时进入睡眠状态,从而让出CPU,使有相同优先级线程和低优先级线程有执行的机会。 二是调用yield()而放弃CPU,这时和它有相同优先级的线程就有执行的机会。 5.1.1基本概念 (八) 3.线程的状态与生命周期 每个Java程序都有一个缺省的主线程: 对于Application,主线程是main方法执行的线索; 对于Applet,主线程指挥浏览器加载并执行Java小程序。 要想实现多线程,必须在主线程中创建新的线程对象。Java语言使用Thread类及其子类的对象来表示线程。 5.1.1基本概念 (九) 新建线程的生命周期如下: 1.新建: 当一个Thread类或其子类的对象被创建后,进入这个状态。 这时,线程对象已被分配内存空间,其私有数据已被初始化,但该线程还未被调度,可用start()方法调度,或用stop()方法中止。 新生线程一旦被调度,就将切换到可执行状态。 5.1.1基本概念 (十) 2.可运行: 处于可执行环境中,随时可以被调度而执行。它可细分为两个子状态: 运行状态,已获
文档评论(0)