Single Threaded Execution Pattern

Posted wzdnwyyu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Single Threaded Execution Pattern相关的知识,希望对你有一定的参考价值。

如果不使用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的主要内容,如果未能解决你的问题,请参考以下文章

java多线程---Single Threaded Execution

nothreading use single threaded

多线程系列之二:Single Thread Execution 模式

使Clion运行编译运行单个C/C++文件(Single File Execution插件)

解决没有该选项问题使Clion运行编译运行单个C/C++文件(Single File Execution插件)

liunx 系统服务查看与管理命令