- 1、本文档共300页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
原创完整版课件全套ppt完整版电子课件完整版电子讲义完整版电子教案全套课件全套ppt教学教程
运行结果 ******************************************************************* 老兵带你分析代码 在safe()方法上添加了关键字synchronized,此时safe()方法就是同步方法,同一个时刻只运行一个线程调用该方法,如果多个线程都在方法该方法,其它线程需要等待正在调用该线程的方法调用结束后再进入该方法。 synchronized关键字相当于为safe()方法添加了一把锁头,只有拿到钥匙的线程才能访问该方法。本例中safe()方法是静态方法,那么钥匙就是当前类的元数据,即ThreadSafeDemo1.calss,由于当前类的元数据只有一个,因此钥匙只有一把,不会造成非线程安全。 如果safe()是实例方法,那么钥匙就是调用safe()方法的对象,而对象可以创建多个,导致钥匙有多把,也可能造成非线程安全。 任务6:实例方法的非线程安全 import java.util.ArrayList; class TheThread2 extends Thread { public void run() { /* ** * main方法中每循环一次,就创建了一个子线程,每个子线程都创建一个tsd对象 * tsd对象调用safe()方法,由于safe()方法是实例方法,因此所有的tsd对象都是 * 钥匙,导致多个线程同时访问safe()方法,造成非线程安全 * */ ThreadSafeDemo2 tsd =new ThreadSafeDemo2(); tsd.safe(); } } public class ThreadSafeDemo2 { public static ArrayList list = new ArrayList(); public static ArrayList list = new ArrayList(); public synchronized void safe() { list.get(0); list.clear(); list.add(test); System.out.print(*); } public static void main(String[] args) { list.add(test); for (int i = 0; i 10000; i++) { TheThread2 thread = new TheThread2(); thread.start(); } System.out.println(执行完成!); } } **********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************Exception in thread Thread-412 *****java.lang.IndexOutOfBoundsException: Index: 0, Size: 1 * at java.util.ArrayList.rangeCheck(ArrayList.java:635) at java.util.ArrayList.get(ArrayList.java:411) at t.ThreadSafeDemo2.safe(ThreadSafeDemo2.java:19) at t.TheThread2.run(ThreadSafeDemo2.java:13) ************************************************** 运行结果 为了避免实例方法可能有多个对象实例对象造成非线程安全,可以把造成非线程安全的代码放在同步块中,同步块声明格式如下 synchronized(loc
您可能关注的文档
- CorelDRAW X8核心应用案例教程整套课件完整版ppt教学教程最全电子讲义教案(最新).ppt
- CorelDRAW 平面设计简明教程学整套ppt课件完整版教学教程最全电子讲义(最新).ppt
- CorelDRAWX3精品教程完整版教学课件 整套教程电子讲义(最全最新).ppt
- 汽车发动机构造与维修完整版ppt整本书课件全套教学教程最全电子讲义(最新).ppt
- 汽车使用技术完整版课件.ppt
- Excel基础与应用精品教程完整版教学课件 整套教程电子讲义(最全最新).ppt
- Excel综合应用简明教程完整版教学课件 整套教程电子讲义(最全最新).ppt
- 汽车销售实务全书课件完整版ppt全套教学教程最全电子教案电子讲义(最新).ppt
- Flash 基础与应用整套ppt课件完整版教学教程最全电子讲义(最新).ppt
- IllustratorCS2精品教程完整版教学课件 整套教程电子讲义(最全最新).ppt
文档评论(0)