- 1、本文档共55页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Ja的va线程
10.4 线程互斥 10.4.1问题的提出 10.4.2 互斥对象 10.4.1问题的提出 首先我们来看一个例子。类Acount代表一个银行账户。其中变量balance是该账户的余额。 public class Acount{ double balance; public Acount(double money){ balance = money; System.out.println(Totle Money: +balance); } } 10.4.1问题的提出 下面我们定义一个线程,该线程的主要任务是从Acount中取出一定数目的钱。 public class AcountThread extends Thread { Acount acount; int delay; public AcountThread(Acount acount,int delay) { this.acount =acount; this.delay = delay; } 10.4.1问题的提出 public void run(){ if(acount.balance = 100){ try{ sleep(delay); acount.balance = acount.balance - 100; System.out.println(withdraw 100 successful!); }catch(InterruptedException e) { } } else System.out.println(withdraw failed!); } 10.4.1问题的提出 public static void main(String[] args) { Acount acount = new Acount(100); AcountThread acountThread1 = new AcountThread(acount,1000); AcountThread acountThread2 = new AcountThread(acount,0); acountThread1.start(); acountThread2.start(); } } 10.4.1问题的提出 该结果非常奇怪,因为尽管账面上只有100元,但是两个取钱线程都取得了100元钱,也就是总共得到了200元钱。出错的原因在哪里呢? 由于线程1在判断满足取钱的条件后,被线程2打断,还没有来得及修改余额。因此线程2也满足取钱的条件,并完成了取钱动作。从而使共享数据balance的完整性被破坏。 参见AcountThread.java 运行结果如下: Totle Money: 100.0 withdraw 100 successful! withdraw 100 successful! 10.4.2 互斥对象 上面的问题,并不是新问题,其实在并发程序设计中已经被研究并得到了解决。我们首先回忆两个概念。在并发程序设计中,对多线程共享的资源或数据成为临界资源,而把每个线(进)程中访问临界资源的那一段代码段成为临界代码段。通过为临界代码段设置信号灯,就可以保证资源的完整性,从而安全地访问共享资源 10.4.2 互斥对象 为了实现这种机制,Java语言提供以下两方面的支持: 1 为每个对象设置了一个“互斥锁”标记。该标记保证在每一个时刻,只能有一个线程拥有该互斥锁,其它线程如果需要获得该互斥锁,必须等待当前拥有该锁的线程将其释放。该对象成为互斥对象。因此,java中的每一个对象都是互斥对象. 2 为了配合使用对象的互斥锁,Java语言提供了保留字synchronized.其基本用法如下: synchronized(互斥对象){ 临界代码段 } 修改后的程序AccountThread2.java AccountThread2.java class Semaphore{} public class AcountThread2 extends Thread { Acount acount; int delay; Semaphore semaphore; public AcountThread2(Acount acount,int delay,Semaphore semaphore) { this.acount =acount; thi
您可能关注的文档
- Illustrato的r试题 答案.doc
- IH的E测试培训-模拟系统MESA的安装及使用.ppt
- InCloud Sphe的re V4 0旗舰版-vF+安全.pptx
- impala的学习笔记.docx
- INCO Terms国际贸易术的语总结.pptx
- Internet协议的分析作业答案.doc
- Internet的应用教程.ppt
- inco的Pat 售后培训手册.pdf
- IND880的车辆衡说明书_R00.pdf
- InTou的ch教程.ppt
- 1.1细胞是生命活动的基本单位课件-2024-2025学年高一上学期生物人教版必修1.pptx
- 1.2细胞的多样性和统一性第1课时课件-2024-2025学年高一上学期生物人教版必修1.pptx
- 第16课《白杨礼赞》课件-2025-2026学年统编版语文八年级上册.pptx
- 2026届高三生物一轮复习课件+减数分裂与生物的遗传、变异.pptx
- 3.1细胞膜的结构和功能第2课时课件-2025-2026学年高一上学期生物人教版必修1.pptx
- 2025届高三生物一轮复习课件2.1减数分裂和受精作用.ppt
- 中考语文二轮专题复习课件:新闻概括题.pptx
- 第6课《我看》课件+++2025-2026学年统编版语文九年级上册.pptx
- 第21课《人民英雄永存不朽》课件-2025-2026学年统编版语文八年级上册.pptx
- 2025年广西河池罗城特聘农机技术指导员的(1人)考前自测高频考点模拟试题含答案详解(b卷).docx
文档评论(0)