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插件)