图解java多线程设计模式-第一章 Single Threaded Execution模式

java8源码-GraphicMultiThreadDesignPattern:图解Java多线程设计模式 java8 源码 记录自己学习《图解Java多线程设计模式》这本书的全部过程 本书上传的所有代码都是可以运行的,在此附上本书源码地址: 在此向本书作者和译者表示感谢 运行环境 Eclipse版本:Oxygen.2 Release (4.7.2) JDK版本:jdk1.7.0_79 代码结构 src\com\gdp +---activeObject---------------------------主动对象模式 +---balking--------------------------------停止返回模式 +---future---------------------------------等待返回模式 +---builder--------------------------------建造者模式 +---guardedSuspension----------------------保护性暂挂模式 +---immutable------------------------------不可变模式 +---introduction1-------------------------- 立即下载

以下内容是我在阅读《图解Java多线程设计模式》一书中的总结和思考

本章配语是:能通过这座桥的只有一个人

几个概念:

  1. SharedResource(共享资源):可以被多个线程访问的类,包含safeMethod和unsafeMethod。其中unsafeMethod就是在多线程环境下不安全的,需要同步的方法。
  2. Single Threaded Execution模式:同一时间内只能让一个线程执行处理。

在Single Threaded Execution模式中,满足以下全部条件时,死锁就会发生:

  1. 存在多个SharedResource角色
  2. 线程在持有某个SharedResource角色的锁的同时,还要获取其他SharedResource角色的锁才能完成任务
  3. 获取SharedResource角色的锁的顺序是对称相反的,例如先锁A再锁B,和先锁B再锁A,这样就是对称相反

以上条件有一个不满足,死锁就会破解。比如:

  1. 将多个SharedResource角色封装到一个类中,这样就变成只有一个SharedResource角色了
  2. 上锁的顺序全都一样,这样也不会发生死锁

注意,这只是针对Single Threaded Execution模式:同一时间只能让一个线程执行处理。而能够实现这样的关键就是对访问共享资源的方法(method)进行互斥处理,也就是synchronized。

所以,只要同一个类中的方法(method)标志了synchronized关键字,就说明这些方法(method)之间是互斥的。

 

可复用性和继承反常

如果子类能够访问SharedResource角色的字段,那么编写子类的开发人员就要注意,子类中的方法是否可以破坏安全性,因为子类对象可以随意访问SharedResource的字段。

对于多线程程序设计来说,继承会引起一些麻烦的问题,需要妥善处理。

 

临界区的大小和性能

临界区:上锁的区域,就是{}花括号之间的代码。

一般来说,临界区越大,性能就越低,发生线程冲突的概率就越高。

void method()
{
	synchronized (this)
	{
		// 线程无关的代码
		...
		// 真正需要同步的代码
	}
}

就以上代码,如果将线程无关的代码放到同步代码块中,那么明明不用等待就可以操作的代码却要花时间去等待,那么就会降低效率了。

 

synchronized在保护着什么

这个问题要考虑到两个方面,一个是要弄清保护什么,另一个是要确定保护成功。

保护的一般就是SharedResource,具体一点来说就是字段的值。

是否保护成功:

关于这个问题,是需要不断累积经验才能快速准确地判断的。比如说出现继承反常的情况(即父类字段可以被子类直接调用)。

又比如对于SharedResource,一般来说是要一起放到临界区之内的,如果出现类似如下代码,即SharedResource没有放在一起保护,这样也就没有意义了,达不到效果。

public synchronized void setName(String name)
{
	this.name = name;
}

public synchronized void setAddress(String address)
{
	this.address = address;
}

 

原子操作

是否是原子操作对于是否需要上锁有比较大的影响。如果一个方法里面只有一个原子操作,那么就没有必要上锁了。

一般来说:基本数据类型和引用操作都是原子操作,但:double和long的操作就不是原子操作。还有,++和--也不是原子操作。

 

Semaphore类

java.util.concurrent包提供了表示计数信号量的Semaphore类。

这个有空再贴代码上来吧

JS实例(三)图片的缓慢放大和缩小   我们经常能看到在一些网站中可以通过按钮实现对图片的放大或者缩小,也有可能是鼠标经过时图片放大。在本例中就是通过JavaScript实现图片的放大和缩小。   首先是进行简单的页面布局 1 <div class="imagedispose"> 2 <img src="1.jpeg" id="imaged" width="400px" height="3... 阅读详情

相关推荐

树莓派 SPI操作

扩展板配备一款0.96inch,128864分辨率的oled显示屏,通过SPI控制,先上显示效果图。由于程序过长,在这里我就不把代码全部贴出来了,只是简单讲解一下spi的操作函数。管脚如下如所有,左边方框的管脚分别为MOSI MISO SCLK,左边CE0,CE1为两个片选管脚,分别对应上图中的spidev0.0,spidev0.1两个设备。下载spidev库,复制到树莓派,并行运行如下命令解压安装。spi设备,此处设备为/dev/spi-decv0.0。在/dev路径下面,我们可以发现两个spi设备。

weixin_46529898的博客 914

图解多线程设计模式pdf_图解Java多线程设计模式 PDF 全书扫描版

序章1 Java线程 1I1.1 Java线程 2I1.2 何谓线程 2明为跟踪处理流程,实为跟踪线程 2单线程程序 3多线程程序 4Thread类的run方法和start方法 5I1.3 线程的启动 9线程的启动(1)——利用Thread类的子类 9线程的启动(2)——利用Runnable接口 10I1.4 线程的暂停 12I1.5 线程的互斥处理 13synchronized方法 14sync...

weixin_30839665的博客 1426

当我们谈论Unidbg时我们在谈什么

文章目录一、前言二、使用Unidbg的工作量是什么三、补环境补的是什么3.1 运行环境缺失3.2 上下文缺失四、Unidbg 不是所有情况下最优的解决方案五、Unidbg在大多数情况下是好的方案六、Unidbg和风控无关七、尾声 一、前言 这是一篇漫谈Unidbg的文章,我对Unidbg的使用和理解都还很浅,日后会更新或修改看法,欢迎大佬指点,也期待同侪讨论。 二、使用Unidbg的工作量是什么 我们常规使用Frida + IDA的动静态分析中,工作可能是这样的 找线索→Frida Hook验证→验证成功继

lilac的博客 5788

Java 多线程设计模式

安全性:不损坏对象不安全是指,对象的状态处于非预期状态,比如账户余额变成了负值生存性:进行必要的处理生存性是指:程序能正常运行,可进行必要的处理,影响生存性的典型问题有出现死锁复用性:可再利用类复用性是指代码重用,若复用性好,可减少大量重复代码性能:能快速,大量进行处理性能有两个方面的考虑因素:吞吐量和响应性,客户端程序比较重视响应性,服务端程序更重视吞吐量,吞吐量是指单位时间内完成的任务,响应性是指提交任务后多长时间内能收到程序的反馈。

假装你是大灰狼的专栏 814

映泰TB250-BTC主板魔改BIOS支持8/9代CPU实战与开机故障排查

BIOS(基本输入输出系统)是计算机硬件与操作系统之间的桥梁,负责初始化硬件和提供运行时服务。其工作原理是通过存储在主板芯片中的固件程序,在上电自检(POST)阶段完成对CPU、内存等关键组件的检测与配置。魔改BIOS的技术价值在于突破硬件限制,通过修改微码和电源管理模块,让旧平台支持新处理器,从而以极低成本实现性能跃升,在预算有限或追求极致性价比的DIY、办公和软路由等应用场景中极具吸引力。本文以映泰TB250-BTC矿板为例,详细解析了通过软刷方式刷入魔改BIOS,并重点解决了刷写后常见的“开机风扇转一

weixin_29164185的博客 405

【移动APP测试】Firebase Test Lab (FTL) 实战指南:从零搭建自动化测试流水线

本文详细介绍了Firebase Test Lab (FTL) 在移动APP测试中的实战应用,从零搭建自动化测试流水线。通过真实设备、虚拟设备和iOS设备的全面覆盖,FTL帮助开发者高效进行兼容性测试、性能监控和崩溃分析,显著提升应用质量。文章还提供了设备选择策略、成本控制技巧和CI/CD集成的最佳实践,助力团队优化测试流程。

weixin_29281915的博客 253

并发编程笔记——多线程设计模式

多线程设计模式

金牛区代码仔的博客 479

彻底卸载Ubuntu双系统,并完美回收100G空间给D盘

本文记录了安全卸载Ubuntu双系统并回收磁盘空间的全过程。作者首先通过Windows命令行彻底清除Ubuntu启动项,避免GRUB引导报错;随后在磁盘管理中删除Linux分区,将100G未分配空间合并至相邻的D盘。针对C盘空间不足问题,作者采用Dism++清理系统文件,并将用户文档、聊天记录等迁移至扩容后的D盘。最终实现了引导纯净、空间合理分配的目标,特别强调分区扩展必须遵循"相邻原则",建议通过间接迁移而非直接扩容来优化系统盘空间管理。

2403_85993278的博客 1512

java多线程&&设计模式浅了解

一个进程就是一个正在运行的程序。线程就是进程中的执行单位。一个进程里可以有多个线程故而称之为多线程(一个线程只属于一个进程)。线程执行相当于去抢cpu执行的,当执行一个线程未执行完事可能下一个线程开始执行了。

BASK2311的博客 350

Windows 11下Dify安装部署实战指南

本文详细介绍在Windows 11环境下部署开源LLM应用开发平台Dify的完整流程。涵盖环境准备(WSL 2启用、Docker Desktop安装配置)、源码获取、Docker容器化部署、数据库初始化、服务启动验证等核心步骤。包括环境变量配置、性能优化、安全加固、端口冲突解决、数据库连接故障排查等关键技术要点。为开发者提供从零到一的Dify本地化部署实战指南

weixin_44269410的博客 851

国际参考电离层2020模型Matlab(IRI-2020)

国际参考电离层 (IRI) 是一个国际项目 由空间研究委员会 (COSPAR) 和国际 无线电科学联盟 (URSI)。这些组织组成了一个工作组 (在 60 年代后期产生了电离层的经验标准模型, 基于所有可用数据源 (几个稳步改进的版本 模型已经发布。电子密度、电子温度、离子温度、 离子组成(O+、H+、He+、N+、NO+、O+2、簇离子)、赤道垂直离子漂移、垂直电离层电子含量(vTEC;

weixin_44392003的博客 4879

图解多线程设计模式pdf_图解Java多线程设计模式阅读计划-图灵社区.PDF

图解Java多线程设计模式阅读计划-图灵社区Java——1JavaJava13D APIjava.util.concurrentJavaJava332120:00—22:00/book/1812/BetterTuring/turingWeChatGroupsJavaJDKJDK 1.8IDEIntelliJ IDEA务必在阅读主要章节前,先阅读[关于UML]相关内容。121—4121JavaJav...

weixin_36086687的博客 411

XPATH注入漏洞检测工具汇总

环境 > Python3.7。

墨痕诉清风的博客 741

图解多线程设计模式pdf_图解Java多线程设计模式pdf

精选12种与多线程和并发处理相关的设计模式264张图表 + 300段Java示例程序 = 轻松学习多线程编程1.图文并茂 通俗易懂日本资-深技术作家、《程序员的数学》作者结城浩执笔,264张图表(UML类图、时序图、Timethreads图等)穿插文中,通过类比手法和浅显的语言,逐一讲解与多线程和并发处理相关的12种设计模式。每章附带练习题和答案,自学者也可轻松学习2.专业实用 拓展进阶编写了30...

weixin_39790686的博客 757

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Single Threaded Execution模式

Single Threaded Execution模式——能通过这座桥的只有一个人 Single Threaded Execution模式是多线程设计的基础。 Single Threaded Execution即“以一个线程执行”。就像独木桥同一时间只允许一个人通行一样。 Single Threaded Execution有时候也称为临界区(critical section)或临界域(critic...

洋洋攻城记的博客 303

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

《图解Java多线程设计模式》笔记 Single Threaded Execution模式

Single Threaded Execution模式—每次能通过这座桥的只有一个人;

276

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

读《图解java多线程设计模式》总结--Single Threaded Execution

1,Single Threaded Execution从名字上来看,就是一次只允许一条线程执行,其他还没有获得执行权力的只能等待。 2,适用范围:保护共享资源(SharedResource),防止多线程同时修改共享资源时造成混乱 3,实现方式:采用Synchronized来修饰操作共享资源的方法,相当于每次只允许一条线程执行该方法 4,图解,当线程1调用Synchronized方法修改共享...

kanganrui的专栏 353

图解多线程设计模式pdf_多线程设计模式

多线程开发可以更好的发挥多核cpu性能,常用的多线程设计模式有:Future、Master-Worker、GuardSusperionsion、不变、生产者-消费者 模式;jdk除了定义了若干并发的数据结构,也内置了多线程框架和各种线程池;锁(分为内部锁、重入锁、读写锁)、ThreadLocal、信号量等在并发控制中发挥着巨大的作用。多线程设计模式:1.Single Threaded E...

weixin_34305091的博客 296

读《图解多线程设计模式》之Single Threaded Execution

Single Threaded Execution---以单个线程执行 1、概念:确保同一时间内只让一个线程执行处理 2、用在何处:多线程程序中,多个线程访问时,共享对象角色状态发生改变。 3、什么是共享对象角色:就是多个线程访问的同一个对象或方法。 4、如何保证线程安全:synchronized关键字。 5、可能发生的问题:死锁。 6、synchronized实现原理:java代码层面我们使用synchronized关键字,然后编译器编译成字节码文件时,内部是monitorener以及moni

Riztal的博客 227

京东、快手及其他小公司Android面试(2020)

京东电话面试 Java list: map: hash算法 LruCache实现和源码: 线程池分类和使用: view view绘制 事件分发 自定义View流程 工作中遇到的问题 技术难点和其他问题 性能优化 卡顿原理 性能优化工具 ...

大前端程序员的自我修养 1392

线程状态

并发编程 线程的状态 流程 现成的状态分为如下五个: NEW RUNNABLE RUNNING BLOCKED TERMINATED 状态转换说明 NEW: 新建对象 ,调用start 进入runnnable状态 RUNNABLE:调用start才会进入此状态,只有获得cpu的时间片才会执行,此状态不会直接进入blocked状态,必须获得cpu的调度执行权才可以,严格讲,只能意外终止或者进入running状态 RUNNING:RUNNING状态的线程一定是RUNNABLE,RUNNABLE状态不一定是R

u012977486的博客 403

java多线程12种设计模式

1、Single Threaded Execution Pattern(单线程执行模式)

堆码时刻 4265

组合模式(部分整体模式)

看一个学校院系展示需求 编写程序展示一个学校院系结构:需求是这样,要在一个页面中展示出学校的院系组成,一个学校有多个学院,一个学院有多个系。如图: 传统方案解决学校院系展示(类图) 传统方案解决学校院系展示存在的问题分析 将学院看做是学校的子类,系是学院的子类,这样实际上是站在组织大小来进行分层次的 实际上我们的要求是:在一个页面中展示出学校的院系组成,一个学校有多个学院,一个学院有多个系, 因此这种方案,**不能很好实现的管理的操作,**比如对学院、系的添加,删除,遍历等 解决方案:把学校、院、系都

笔记别偷看 632

图解java多线程pdf_阿里大牛都在读的图解Java多线程设计模式,进阶架构师必备PDF...

本书整理了12种常用的多线程设计模式,“图、文、码”并茂地讲解了它们各自的优缺点、相互的关联以及适用场景。不过这并不表示本书只适合已经掌握多线程编程的开发人员阅读和参考,因为作者还在讲解各种设计模式的过程中体贴地为初学者穿插介绍了多线程的基本知识。相信无论是新手还是老鸟,都能在阅读本书的过程中有所收获。此外,除第13章外,本书每章末尾都配有练习题,读者可以通过做题检验自己是否掌握了各章的知识。本书...

weixin_35340730的博客 432

图解Java多线程设计模式

从“操作中”变为“终止处理中”是线程终止的第一阶段。Active 是“主动的”的意思,因此 Active Object 就是“主动对象”的意思。所谓“主动的”, 一般指“有自己特有的线程”。Specific是“特定的”的意思,Storage是储存柜、存储装置的意思。因此,所谓ThreadSpecific Storage 就是“每个线程特有的存储柜”“为每个线程准备的存储空间”的意思。Producer是生产者的意思,指的是生成数据的线程。Consumer则是"消费者"的意思,指的是使用数据的线程。

wcg_jishuo的专栏 1345

第二十章:多线程

单例设计模式:保证类在内存中只有一个实例对象。比如BBS论坛中访客(当前在线人数)的实时统计,必须保证存储总数的对象只能是一个。如何保证类在内存中只有一个对象?控制类的创建,不让其他的类来创建本类对象——使用private修饰构造方法。在本类中定义一个本类的对象。对外提供一个公共的访问方法。

hb20021005的博客 207
上一篇: 图解java多线程设计模式-序章2 多线程程序的评价标准
下一篇: 图解java多线程设计模式-第二章 Immutable模式
Luke_R
博客等级 码龄9年 3粉丝 46原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值