- 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 实用程序的设计第10章 Java线程
10.1 并发的基本思想 在深入多线程程序设计之前,读者需要了解并发的基本思想和动机。并发的第一个动机在一些操作系统原理书籍中经常被提及,即并发能够为单处理器上的程序提供性能的提升。表面上看,单处理器上运行并发程序引入了上下文切换的开销,似乎应比同样功能的顺序程序执行得慢。但在实际系统中存在阻塞的情况。也就是说,程序中的某个任务可能会被程序控制范围外的某些条件(如输入/输出)阻塞而不能继续执行。 10.2 Java的基本线程机制 一个线程是在进程中的一个单一的顺序执行流。每一个线程都能够驱动一个独立的子任务。CPU会为每个任务分配其占用CPU的时间,程序不需要知道CPU的数量及它所占用的CPU时间。Java的线程模型可以看做是CPU、代码和数据的封装体。线程模型的CPU可以看做是线程在占用CPU时CPU的状态;代码即CPU所执行的代码,可以由多个线程共享;数据包括线程独有数据(程序计数器、栈)和共享数据(如堆上的对象)。 1. 创建线程 线程的创建通常可以通过两种方式完成:实现Runnable接口和继承Thread类。Runnable接口是java.lang包中定义的一个接口,该接口包含唯一的抽象方法run()。Thread类则是创建线程的基础类。Thread类的构造方法可以传入三类参数:ThreadGroup类型的参数指明新线程所处的线程组;String类型的参数指明新线程的名称;Runnable接口类型的参数所指向的对象类型决定了线程的具体行为。 当通过实现Runnable接口来创建线程时,要完成以下工作: (1) 定义一个类,该类实现Runnable接口,即在该类中提供run()方法的具体实现; (2) 将该类的一个实例对象(可称为任务)传递给Thread类的构造方法构造线程对象。 当通过继承Thread类的方法创建线程时,应通过以下两步: (1) 从Thread类派生出子类,并通过重写子类的run()方法提供线程体; (2) 通过创建子类的对象创建线程。 2. Executor Executor是J2SE 5.0中引入的执行器接口,它存在于java.util.concurrent包中。Executor可以帮助用户管理线程对象,从而简化编程开发。Executor将主线程与所有任务线程分隔开,能够帮助主线程管理异步任务的执行,主线程不再需要显式地管理任务线程的生命周期。与传统的线程创建方法相比,Executor是一种更优的方式。 3. 线程优先级 线程的优先级将该线程的重要性传递给调度器。虽然CPU处理现有线程集合的顺序是不确定的,但调度器会倾向于让优先级较高的线程先执行。这并不代表优先级较低的线程将得不到执行,但是优先级较低的线程的执行频率会比较低。 4. 睡眠sleep()与让步yield() 在例10-1和例10-2中,我们都使用到了Thread类的静态方法sleep(),该方法能够将线程的执行暂停一段固定的时间,将CPU让给比当前线程优先级更低的线程。对sleep()的调用可能抛出InterruptedException异常,因为异常不能跨线程传播,因此必须在run()方法中加以捕获。 5. 加入一个线程join() 一个线程可以在另一个线程上调用join()方法。如果当前线程在另一个线程t上调用t.join(),那么当前线程将会被挂起,直到目标线程t结束(即t.isAlive()返回值为false)时才恢复运行。也可向join()加入一个超时参数,如果目标线程t在这段时间内还没有结束,join()总是可以返回。 例10-5 TestJoin.java:线程join()示例。 6. 终止线程 早期的Java版本提供stop()方法强行终止一个线程,该方法在终止线程时不释放线程获得的锁,因而容易导致线程不一致,故在现代Java中已经被废止。较为安全的方式是使用一个标志,并提供方法对标志进行操作,标志的值决定了是否终止某个任务。 10.3 资源共享与同步 多线程机制允许我们在同一时刻做多件事情,假设这些事情之间没有干涉,那么也不会有什么问题。但很多情况下,多个线程会共享一些资源或数据,当多个线程同时操作这一资源或数据时,线程运行顺序的不确定性会导致共享资源或数据的结果产生不确定性,共享数据的一致性可能被破坏。因此,在多线程机制中,必须考虑对线程进行同步,以防止此类不一致的情况发生。 1. 资源访问冲突 在例10-6的AddAccount类中,我们定义了一个由多个线程共享操作的静态Account类型的成员变量account,在main()方法中,通过并发执行10
您可能关注的文档
- DESIGNING TO FACILITATE CHANGE Brian Foote的设计方便更改布瑞恩富特.doc
- Destroying the Environment Government Mismanagement of Our 破坏我们的的环境,政府管理不善.ppt
- Development Contribution Scheme 2011201720112017发展贡献的方案.doc
- DEVELOPMENT CONTRIBUTION SCHEME PREPARED 发展贡献的方案制备.doc
- DEVELOPMENT CONTRIBUTION SCHEME 2011发展贡献的方案2011.doc
- Design Patters Composite & Observer的设计模式复合&;观测器.ppt
- Dandelions 2006 first results蒲公英2006第一的的结果.ppt
- DfES Schools in Extremely Challenging Circumstances the WMnet英国学校在极具挑战性的的环境下的wmnet.ppt
- DEVELOPMENT CONTRIBUTION SCHEME发展贡献的方案.doc
- Development partnership Dublin Employment Pact发展伙伴的关系都柏林就业协议.ppt
- 2025年水污染防治行业环保技术标准解读及未来十年趋势报告.docx
- 新能源汽车芯片技术创新与国产替代产业链发展研究报告.docx
- 低空交通管理系统技术标准2025年航空产业政策与航空器租赁市场发展.docx
- 民办教育行业2025年教育行业数字化转型趋势分析:现状与未来.docx
- 传染病防治法律法规2025梳理与未来五年行业合规报告.docx
- 2026年新能源产业就业岗位增长预测:技术创新驱动行业变革报告.docx
- 新能源汽车高压系统安全测试与技术创新应用前景分析报告2025.docx
- 2025年光伏行业出海技术壁垒突破:市场应用与产业创新分析报告.docx
- 脑电波控制外骨骼设备商业化推广策略与市场前景研究报告.docx
- 高温合金在航空航天飞行器热交换器材料性能提升与应用.docx
文档评论(0)