码迷,mamicode.com
首页 > 其他好文 > 详细

Single Threaded Execution Pattern

时间:2019-07-08 19:31:50      阅读:95      评论:0      收藏:0      [点我收藏+]

标签:解释   产生   需要   一个   image   数据   let   结果   mic   

如果不使用Single Threaded Exception Pattern:

技术图片

门类:

技术图片

人类:

技术图片

 

 main:

技术图片

执行结果:

技术图片

为什么会有broken(损坏):

技术图片

Gate是非线程安全的类。
测试并无法证明安全性,当测试次数不够、时间点不对就可能检查不到问题:
技术图片
调试的消息也不可靠:

 技术图片

由多个人仔细阅读程序源代码,检查是否会产生问题,才是确保程序安全性最有效的方法。
 
修改后:
使用SingleThreadedExecutionPattern
保护范围:
 
 
 
只需要改非线程安全类Gate就行了:
技术图片

为什么不?

技术图片

因为:
要保护的是name与address的统一性,他们两个是合在一起的。
技术图片

为什么要在tostring方法加synchronized?

技术图片

为什么check方法又不加synchronized?
——因为只有pass方法调用check方法,而pass方法已经加上synchronized了
技术图片

是获取谁的锁定来保护的呢????

技术图片

如果实例不同,那锁定也不同了。如果有多个相异实例,那多个线程仍然可以分别执行不同实例的synchronized方法。

技术图片

技术图片

必须只让单线程执行的程序范围,称为临界区。
何时使用SingleThreadedExecutionPattern:
 
  • 多线程时
  • 数据可以被多个线程访问的时候
  • 状态可能变化的时候
  • 需要确保安全性的时候
 
SingleThreadedExecutionPattern的生命性与死锁  
技术图片

技术图片

SingleThreadedExecutionPattern的可重用性与继承异常:
若写了一个SharedResource参与者的子类,在子类中若unsafeMethod不定义成synchronized,就无法保证sharedResource参与者的安全性s。
(解释:unsafeMethod,是指线程不安全的类,在父类和子类中都要被定义为synchronization)
 
临界区的大小与执行性能:
使用SingleThreadedExecutionPattern致使性能低的两个原因:
1.获取锁定需要花费时间
2.线程冲突时必须等待

 技术图片

技术图片

技术图片

 

Single Threaded Execution Pattern

标签:解释   产生   需要   一个   image   数据   let   结果   mic   

原文地址:https://www.cnblogs.com/wzdnwyyu/p/11152938.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!