- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《java多线程编程》.pdf
第11 章 多线程编程
和其他多数计算机语言不同,Java 内置支持多线程编程(multithreaded programming 。
多线程程序包含两条或两条以上并发运行的部分。程序中每个这样的部分都叫一个线程
(thread ),每个线程都有独立的执行路径。因此,多线程是多任务处理的一种特殊形式。
你一定知道多任务处理,因为它实际上被所有的现代操作系统所支持。然而,多任务
处理有两种截然不同的类型:基于进程的和基于线程的。认识两者的不同是十分重要的。
对很多读者,基于进程的多任务处理是更熟悉的形式。进程(process)本质上是一个执行的
程序。因此,基于进程(process-based) 的多任务处理的特点是允许你的计算机同时运行两
个或更多的程序。举例来说,基于进程的多任务处理使你在运用文本编辑器的时候可以同
时运行Java编译器。在基于进程的多任务处理中,程序是调度程序所分派的最小代码单位。
在基于线程(thread-based) 的多任务处理环境中,线程是最小的执行单位。这意味着一
个程序可以同时执行两个或者多个任务的功能。例如,一个文本编辑器可以在打印的同时
格式化文本。所以,多进程程序处理“大图片”,而多线程程序处理细节问题。
多线程程序比多进程程序需要更少的管理费用。进程是重量级的任务,需要分配它们
自己独立的地址空间。进程间通信是昂贵和受限的。进程间的转换也是很需要花费的。另
一方面,线程是轻量级的选手。它们共享相同的地址空间并且共同分享同一个进程。线程
间通信是便宜的,线程间的转换也是低成本的。当Java程序使用多进程任务处理环境时,
多进程程序不受Java 的控制,而多线程则受Java控制。
多线程帮助你写出CPU最大利用率的高效程序,因为空闲时间保持最低。这对Java运
行的交互式的网络互连环境是至关重要的,因为空闲时间是公共的。举个例子来说,网络
的数据传输速率远低于计算机处理能力,本地文件系统资源的读写速度远低于CPU 的处理
能力,当然,用户输入也比计算机慢很多。在传统的单线程环境中,你的程序必须等待每
一个这样的任务完成以后才能执行下一步——尽管CPU有很多空闲时间。多线程使你能够
获得并充分利用这些空闲时间。
如果你在Windows 98 或Windows 2000这样的操作系统下有编程经验,那么你已经熟
悉了多线程。然而,Java管理线程使多线程处理尤其方便,因为很多细节对你来说是易于
处理的。
11.1 Java线程模型
Java运行系统在很多方面依赖于线程,所有的类库设计都考虑到多线程。实际上,Java
使用线程来使整个环境异步。这有利于通过防止CPU循环的浪费来减少无效部分。
为更好的理解多线程环境的优势可以将它与它的对照物相比较。单线程系统的处理途
径是使用一种叫作轮询的事件循环方法。在该模型中,单线程控制在一无限循环中运行,
第1 部分 Java 语言 192
轮询一个事件序列来决定下一步做什么。一旦轮询装置返回信号表明,已准备好读取网络
文件,事件循环调度控制管理到适当的事件处理程序。直到事件处理程序返回,系统中没
有其他事件发生。这就浪费了CPU时间。这导致了程序的一部分独占了系统,阻止了其他
事件的执行。总的来说,单线程环境,当一个线程因为等待资源时阻塞(block ,挂起执行),
整个程序停止运行。
Java多线程的优点在于取消了主循环/轮询机制。一个线程可以暂停而不影响程序的其
他部分。例如,当一个线程从网络读取数据或等待用户输入时产生的空闲时间可以被利用
到其他地方。多线程允许活的循环在每一帧间隙中沉睡一秒而不暂停整个系统。在Java程
序中出现线程阻塞,仅有一个线程暂停,其他线程继续运行。
线程存在于好几种状态。线程可以正在运行(running )。只要获得CPU时间它就可以
运行。运行的线程可以被挂起(suspend ),并临时中断它的执行。一个挂起的线程可以被
恢复(resume ,允许它从停止的地方继续运行。一个线程可以在等待资源时被阻塞(block )。
在任何时候,线程可以终止(terminate ),这立即中断了它的运行。一旦终止,线程不能
被恢复。
11.1.1 线程优先级
Java给每个线程安排优先级以决定与其他
您可能关注的文档
- 《How-to-write-UK-CVs-and-Job-Applications-2016》.pptx
- 《Howells_2016_Integrated analysis of climate change》.pdf
- 《hse ladder》.pdf
- 《HTML+CSS+JavaScript基础培训》.ppt
- 《HTML、JavaScript与Java三合一最新培训教程》.doc
- 《HuangLiao06 - ACO for the job shop scheduling problem》.pdf
- 《Huangyingling_Lean Startup_0626》.pdf
- 《Human Factor Effects on the Safety Integrity Level Assigned to Safety-》.pdf
- 《Human resource generalists the job description》.doc
- 《HW系列直廓环面蜗杆减速机》.ppt
文档评论(0)