线程-Timer讲述.pptxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
;;;;案例异步写文件 1) 一个线程负责将控制台信息读取到内存缓冲区(集合) 如果控制台输入quit 将结束输入. 中断写出线程 2) 一个线程负责将缓冲区中的信息写到硬盘文件 每次检查缓冲区是否有数据, 如果有就写出, 直到空为止 如果没有数据就休眠5秒 写出线程是后台线程, 可以自动结束 3) 缓冲区采用队列(FIFO)的工作方式;;多线程出现故障的原因: (1).多个线程同时访问一个数据资源(该资源称为临界资源),形成数据发生不一致和不完整。 (2).数据的不一致往往是因为一个线程中的多个关联的操作(这几个操作合成原子操作)未全部完成。 避免以上的问题可采用对数据进行加锁的方法;a 对象锁 Synchronized 防止打断原子操作,解决并发访问的故障。 //原子操作:不可分割的几个操作,要么一起不做,要么不能被干扰地完成。 1.互斥锁标记:每个对象除了属性和方法,都有一个monitor(互斥锁标记), 用来将这个对象交给一个线程,只有拿到monitor 的线程才能够访问这个对象。 ;注意: (1)Synchronized 一定使用在一个方法中。 (2)锁标记是对象的概念,加锁是对对象加锁,目的是在线程之间进行协调。 (3)当用Synchronized 修饰某个方法的时候,表示该方法都对当前对象加锁。 (4)给方法加Synchronized 和用Synchronized 修饰对象的效果是一致的。 (5)一个线程可以拿到多个锁标记,一个对象最多只能将monitor 给一个线程。 ; (6)构造方法和抽象方法不能加synchronized; (7)一般方法和静态方法可以加synchronized同步。 //静态方法把类看作对象时可加锁 (8)Synchronized 是以牺牲程序运行的效率为代价的,因此应该尽量控制互斥代码块的范围。 (9)方法的Synchronized 特性本身不会被继承,只能覆盖。;b 锁池: 1.定义:线程因为未拿到锁标记而发生的阻塞不同于前面五个基本状态中的阻塞,称为锁池。 2.每个对象都有自己的锁池的空间,用于放置等待运行的线程。这些线程中哪个线程拿到锁标记由系统决定。 3.死锁:线程互相等待其他线程释放锁标记,而又不释放自己的;造成无休止地等待。 死锁???问题可通过线程间的通信解决。; 2.Synchronized:这个修饰词可以用来修饰方法和代码块 Synchronized用来修饰代码块时,该代码块成为同步代码块。 Synchronized 用来修饰方法,表示当某个线程调用这个方法之后,其他的事件不能再调用这个方法。 只有拿到obj 标记的线程才能够执行代码块。;3) 使用同步代码块解决线程并发安全问题 static Object monitor = new Object(); synchronized(monitor){ } a 同步监视器 是一个任意对象实例. 是一个多个线程之间的互斥的锁机制. 多个线程要使用同一个监视器对象 实现同步互斥 b 常见写法: synchronized(this){ } c 如果方法的全部过程需要同步, 可以简单使用 synchronized修饰方法. 相当于整个方法的 synchronized(this) d 尽量减少同步范围, 提高并发效率;4)Java中同步的API 1 StringBuffer 是同步的 synchronized append(); StringBuilder 不是同步的 append(); 2 Vector 和 Hashtable 是同步的 ArrayList 和 HashMap 不是同步的 3 Collections.synchronizedList() Collections.synchronizedMap() ArrayList list = new ArrayList(); List syncList = Collections.synchronizedList(list);;

文档评论(0)

0520 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档