如果不使用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.线程冲突时必须等待

转载于:https://www.cnblogs.com/wzdnwyyu/p/11152938.html

Single Threaded Execution Pattern相关推荐

  1. java single threaded_[Java多线程设计模式]读书笔记 - 第一章 Single Threaded Execution

    Single Threaded Execution是指"以1个线程执行"的意思.就像细独木桥只允许一个人通行一样,这个Pattern用来限制同时只让一个线程运行. Single T ...

  2. 多线程编程模式之Single Threaded Execution 模式

    一.Single Threaded Execution 模式介绍 简单的来说,Single threaded execution 模式描述了在一种多线程环境下各个线程对于公用资源的使用方式--任一时刻 ...

  3. java多线程之Single Threaded Execution模式

    一.简介 所谓Single Threaded Execution模式,就是指"以一个线程执行",就像一座独木桥同一时间内只允许一个人通过一样,该模式用于设置限制,以确保同一时间内只 ...

  4. Single Threaded Execution模式

    以下是学习了<图解Java多线程设计模式>一书中记录的内容 Single Threaded Execution模式--能通过这座桥的只有一个人 Single Threaded Execut ...

  5. 一 、Single Threaded Execution 模式

    当我们修改多个线程共享的实例时,实例就会失去安全性.所以,我们应该仔细找出实例状态不稳定的范围,将这个范围设为临界区,并对临界区进行保护,使其只允许一个线程同时执行. JAVA使用synchroniz ...

  6. 第一章Single Threaded Execution模式 能通过这座桥的只有一个人

    [Single Threaded Execution模式] 以一个线程执行,就像独木桥同一时间内只允许一个人通行一样,该模式用于设置限制.以确保同一时间内只能让一个线程执行处理. Single Thr ...

  7. How is javascript asynchronous AND single threaded?

    原文: https://www.sohamkamani.com/blog/2016/03/14/wrapping-your-head-around-async-programming/ ------- ...

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

    由于Clion只能运行C++工程,因此在写算法的时候无法运行多个C++文件, 我们需要借助Single File Execution插件实现 1.下载插件 2.添加文件 3.刷新项目 4.运行即可 可 ...

  9. 【CLion】如何编译运行单个文件 (C/C++ Single File Execution插件的使用)

    如果你知道如何使用 C/C++ Single File Execution 插件但仍然无法找到运行按钮 请直接看第五张图片 一. 这里我首先新建了一个项目,名为Demo 又在项目文件夹内新建了一个代码 ...

最新文章

  1. MECAT:PC组装人的基因组
  2. 手机版网页需要上服务器吗,手机能做网页服务器吗
  3. 【PL/SQL】Excel批量往数据库中插入数据:
  4. android nfc ndef mifareclassic,Android NFC开发-实践篇
  5. python二进制图片压缩传输_python 中 base64 压缩图片,用post传送
  6. python语言提供的三个基本数据类型是_python基本数据类型
  7. Python自学笔记-map和reduce函数(来自廖雪峰的官网Python3)
  8. FRR BGP协议分析4 -- 路由更新(1)
  9. Linux设备驱动入门
  10. Windows下MySQL定时备份脚本
  11. 第三十九章 Caché 函数大全 $MATCH 函数
  12. bootstrap-入门学习-流体容器与响应式布局容器
  13. 把mysql一个表的部分或全部数据复制追加到另一个表的方法
  14. thinkcmf:Cannot redeclare cmf_get_date() (previously declared in
  15. A Dual Weighting Label Assignment Scheme for Object Detection阅读笔记
  16. linux环境下安装cwp的地震专业软件su
  17. PC端自适应-rem
  18. 网站服务器端口扫描,服务器端口扫描工具
  19. python函数的传参(bert_vocab_from_dataset),函数括号里面含有**是什么意思?
  20. python可以用什么软件编写,用python写的软件有哪些

热门文章

  1. Andriod studio manifast中添加权限却还无效日历api设置定时闹钟却不生效
  2. android 电量性能优化
  3. Open CASCADE Technology(OCCT)概述
  4. 解锁三星bl锁有几种方法_如何判断三星手机bootloader是否解锁_免费解锁BL的3个方法...
  5. 智学网显示服务器开小差了,怎样才能进入智学网,检视孩子的学习成绩?
  6. 塑造成功性格的15种方法
  7. ThinkPad R480 C盘 固态128G 升级到 512G + 系统无缝迁移,不用重装软件
  8. 教你用Python画一棵圣诞树
  9. win10 apex安装
  10. window10下WSL使用Ubuntu报错: System has not been booted with systemd as init system (PID 1). Can‘t operat