- 1、本文档共52页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
设计正确的多线程应用程序① 标识可能由多个线程同时访问的共享数据 ? 这可能是设计多线程应用程序的最重要事情。 这些数据通常定义了应用程序的临界区(critical region)。② 保证共享数据不被多个线程同时访问 ? 须保证访问共享数据的各线程之间互斥(mutual exclusion)。 如果未正确处理互斥,可能导致不见预见的结果。 ? 互斥通常利用数据上的锁来实现。 锁用于避免同时的并发访问。 // 一个线程安全的程序 public class ThreadSafeTeller { private int balance = 0; private boolean smile = false; synchronized void credit(int cash) { balance += cash; smile = (balance 10000); } synchronized void debit(int cash) { balance -= cash; smile = (balance 10000); } } sleep()方法 join()方法 wait()/notify()方法 11.5 线程阻塞 sleep()方法 指定在某一段时间(以毫秒为单位)内线程处于阻塞状态。状态转换: Running ? Blocked:调用一个线程的sleep()方法。 Blocked ? Running:时间事件。 经过指定时间段后,线程又自动恢复为可执行状态。 JDK只保证在指定时间之后被唤醒,不保证准确的时间!注意事项: 如果在同步代码段中执行本方法,线程占有的锁不会释放。 这种行为不同于下述的wait()方法。应用实例: 定期检测线程T所需的某一资源R是否就绪。 如果线程T检测到资源R尚未就绪, 则线程T阻塞一段时间后继续循环检测。 sleep()方法 // 演示调用sleep()方法阻塞线程的用法 public class SleepThread implements Runnable { public void run() { while (true) { // 执行线程本身要完成的任务 ... // 给其他线程一个执行的机会 try { Thread.sleep(100); } catch (InterruptedException exc) { // 本线程的睡眠被另一线程中断,例如: // 另一线程持有本线程的对象引用并调用interrupt()方法 ... } } } } join()方法 让线程进入阻塞状态,等待另一正在运行线程结束后恢复执行。状态转换: Running ? Blocked:调用另一个线程的join()方法。 Blocked ? Running:取决于join()方法的参数。 带时间参数版表示有两个事件均会导致线程重返可执行状态: ① 另一线程执行完毕。 ② 经过的时间已超过指定的时间长度(毫秒)。 无时间参数版表示仅当事件①出现时线程才重返可执行状态。应用实例: 通常结合isAlive()方法使用。 该方法返回线程是否已启动且未结束。 设线程t调用线程s的join()方法后阻塞, 则当s.alive()为false时线程t重返可执行状态。 必须放在一个try-catch块中处理。 因为join()造成的阻塞可由interrupt()方法中断。 join()方法 class Sleeper extends Thread { public Sleeper(String name) { super(name); start(); } public void run() { try { sleep(5000); } catch (InterruptedException e) { System.out.println(getName() + 睡眠被中断。); return; } System.out.println(getName() + 睡醒了!); } } public class Waiter extends Thread { private Sleeper sleeper; public Waiter(String name, Sleeper sleeper) { super(name); this.sleeper = sleeper; start();
您可能关注的文档
- 煤矿瓦斯抽采与利用教案分析.ppt
- 煤矿瓦斯煤尘事故防治与应急避灾—教案分析.ppt
- 煤矿瓦斯灾害防治培训[]教案分析.ppt
- 煤矿瓦斯综合治理技术集成体系(陈久福)教案分析.ppt
- 煤矿新工人安全培训(修)教案分析.ppt
- 煤矿新工人安全培训教案分析.ppt
- 煤矿新工人岗前培训之煤矿“一通三防”基础知识教案分析.ppt
- 煤矿新工人入矿培训入矿培训(新工人培训)经典版本教案分析.ppt
- 煤矿应急救援教案分析.ppt
- 六上三电能和能量陈建秋教案分析.ppt
- 英语人教PEP版八年级(上册)Unit4+writing+写作.pptx
- 人美版美术四年级(上册)8 笔的世界 课件 (1).pptx
- 人美版美术七年级(上册)龙的制作.pptx
- 英语人教PEP版六年级(上册)Unit 2 第一课时.pptx
- 数学苏教版三年级(上册)3.3 长方形和正方形周长的计算 苏教版(共12张PPT).pptx
- 音乐人教版八年级(上册)青春舞曲 课件2.pptx
- 音乐人教版四年级(上册) 第一单元 音乐知识 附点四分音符|人教版.pptx
- 英语人教PEP版四年级(上册)Unit 6 Part B let's learn 1.pptx
- 道德与法治人教版二年级(上册)课件-3.11大家排好队部编版(共18张PPT).pptx
- 人美版美术七年级(上册)《黄山天下奇》课件1.pptx
最近下载
- SX-22163-QR525供应商停止供货通知.docx VIP
- 2024年新大象版四年级上册科学全册知识点(炫彩版).doc
- 青岛市城市介绍旅游攻略实用PPT讲授课件.pptx
- 新人教pep三年级上册Unit2 Different families PartA talk &learn 课件.ppt
- 【核心素养】4.1 陆地与海洋 第二课时 课件(共49张PPT) 七年级地理上学期商务星球版(2024).pptx VIP
- 中华商业文化 教案.docx
- KTM 2019款 390 DUKE 摩托车 中文用户保养手册 使用说明书.doc
- OWC11控件的安装.doc
- 【部编人教版】三年级道德与法治上册全册课件.pptx
- 合作协议(技师).docx VIP
文档评论(0)