- 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 多线程同步问题的探究(二、给我一把锁,我能创造一个规矩)
在上一篇中,我们讲到了多线程是如何处理共享资源的,以及保证他们对资源进行互斥访问所依赖的重要机制:对象锁。本篇中,我们来看一看传统的同步实现方式以及这背后的原理。很多人都知道,在Java多线程编程中,有一个重要的关键字,synchronized。但是很多人看到这个东西会感到困惑:“都说同步机制是通过对象锁来实现的,但是这么一个关键字,我也看不出来Java程序锁住了哪个对象阿?“没错,我一开始也是对这个问题感到困惑和不解。不过还好,我们有下面的这个例程: 1 public class ThreadTest extends Thread { 2 3 private int threadNo; 4 5 public ThreadTest(int threadNo) { 6 this.threadNo = threadNo; 7 } 8 9 public static void main(String[] args) throws Exception {10 for (int i = 1; i 10; i++) {11 new ThreadTest(i).start();12 Thread.sleep(1);13 }14 }1516 @Override17 public synchronized void run() {18 for (int i = 1; i 10000; i++) {19 System.out.println(No. + threadNo + : + i);20 }21 }22 }这个程序其实就是让10个线程在控制台上数数,从1数到9999。理想情况下,我们希望看到一个线程数完,然后才是另一个线程开始数数。但是这个程序的执行过程告诉我们,这些线程还是乱糟糟的在那里抢着报数,丝毫没有任何规矩可言。但是细心的读者注意到:run方法还是加了一个synchronized关键字的,按道理说,这些线程应该可以一个接一个的执行这个run方法才对阿。但是通过上一篇中,我们提到的,对于一个成员方法加synchronized关键字,这实际上是以这个成员方法所在的对象本身作为对象锁。在本例中,就是以ThreadTest类的一个具体对象,也就是该线程自身作为对象锁的。一共十个线程,每个线程持有自己 线程对象的那个对象锁。这必然不能产生同步的效果。换句话说,如果要对这些线程进行同步,那么这些线程所持有的对象锁应当是共享且唯一的! 我们来看下面的例程: 1 public class ThreadTest2 extends Thread { 2 3 private int threadNo; 4 private String lock; 5 6 public ThreadTest2(int threadNo, String lock) { 7 this.threadNo = threadNo; 8 this.lock = lock; 9 }1011 public static void main(String[] args) throws Exception {12 String lock = new String(lock);13 for (int i = 1; i 10; i++) {14 new ThreadTest2(i, lock).start();15 Thread.sleep(1);16 }17 }1819 public void run() {20 synchronized (lock) {21 for (int i = 1; i 10000; i++) {22 System.out.println(No. + threadNo + : + i);23 }24 }25 }26 }我们注意到,该程序通过在main方法启动10个线程之前,创建了一个Strin
您可能关注的文档
- .世界地图引出的发现第二课时教案.doc
- (人教新课标)五年级语文上册课件-我爱你-汉字-1.ppt
- -七律长征.ppt
- 三种方法来解决跨线程访问控件的问题.docx
- 一个好用的线程池.doc
- Android Handler+Thread实现更新Ui.docx
- Java-5线程.doc
- CreateThread与_beginthreadex区别.doc
- 操作系统实验报告——进程同步与互斥.doc
- 第二版 modern information retrieval Chapter 3 modeling.ppt
- 2026年刑法知识考试题库200道及答案【最新】.docx
- 2026年刑法知识考试题库200道及答案【夺冠系列】.docx
- 2026年刑法知识考试题库200道含答案(培优).docx
- 2026年马原考试题库300道及参考答案【考试直接用】.docx
- 2026年马原考试题库300道及答案【夺冠】.docx
- 2026年刑法知识考试题库200道及参考答案(实用).docx
- 2026年期货从业资格之期货法律法规考试题库500道及完整答案1套.docx
- 2026年刑法知识考试题库200道带答案(夺分金卷).docx
- 2026年二级造价师考试题库500道附答案(研优卷).docx
- 2026年投资项目管理师考试题库500道含完整答案(典优).docx
最近下载
- XGC12000履带起重机技术规格书-加彩图.pdf VIP
- 民用机场水泥混凝土道面维护技术指南.pdf VIP
- 东莞市东华高级中学2023-2024学年高一上学期10月联考历史试卷(含答案.pdf VIP
- 广州数控GSK928TD 车床数控系统 使用手册.pdf
- 电子技术基础第六版完整版全套PPT电子课件.pptx VIP
- 长丰县草莓产业融合发展策略研究.pdf VIP
- 东莞东华高级中学、东华松山湖高级中学2023-2024学年高一上学期10月月考英语(word版,有答案).docx VIP
- 译林版高中英语必修一单词默写表.pdf VIP
- 海洋环境保护法解读课件.pptx VIP
- 2025届四川省乐山市高三下学期三调考试语文试题及答案.pdf VIP
文档评论(0)