Zzzz
/**
*
* 使用final修饰变量是为了强调在调用该变量的上下文中,该变量是保证不变的,
*
* 场景:需要将一个同步执行的上下文拆分成分阶段异步执行的上下文,
* 保证上下文环境的“等效”是必要的,做到即使出现“刻舟求剑”的情况,
* 也不是由于上下文的异步拆分引起的。
*
* 上下文的等效的判定:
* 1: 外部引用的资源等效,设置具有final语义是保证等效的“
* 必要但不充分条件”,
* 因为在上下文中引用资源的状态还是可能会有其他形式的改变,
* 而这种改变是否会对“异步改造”的产生影响,
* 需要在“上下文运行流程等效”上进行分析。
* 2: 上下文运行流程等效
*
*
* Tip: 分析一个问题的时候,会有一下关系存在,
* 判断“场景A 是 场景B 的问题”这个关系是否成立。
* 判断这个关系是否成立的过程应该分为两步:
* 1. “就当下系统事实情况”,判断场景A是否和场景B“独立”,
* “独立”的判断可以有很多标准,
* 可以是统计上表现的,也可以是逻辑上的相互制约等
* 如果是独立的,则问题的关系不成立,
* 也就是不应该在场景B的改造中考虑场景A
* 2. 如果相互不独立,则需要具体情况具体分析了。
* 之所以要求有步骤一,是因为在现实中有太多的“伪问题”存在,
* 将两个本来相互独立的现象硬放在一起,
* 说是一个问题,非常具有迷惑性。而且是诡辩中经常使用的伎俩,
*制造“伪问题”:
* 注意“就当下系统的实际情况”的前提,
* 之所以有这个前提是因为我们必须从实际情况出发,
* 因为如果没有这个前提,那么在一个假设的情况中,
* 将两个独立的事情搅和修改成非独立的,是一件很容易的事情。
* 如果这种辩解出现了,首先要提醒的是,这种假设的场景是否是事实,
* 如果不是,问是否觉得这种假设很有道理,
* 让大家很happy,
* 以及是否非要在当前的场景比较中强加进来是否是合适的时机。
*
*
* 实战:
* 问题: 可能有人会问,即便是引用的变量被设置成了final了但是对象实例还是无法保证不变啊?
* 回答: 这确实是一个事实场景,但是即使不做异步改造(也就是在同步的上下文下),这个场景同样可能会发生。
* 此时应判断“即便是引用的变量被设置成了final,但是对象实例还是无法保证不变”场景同“上下文的异步改造”场景
* 是否是独立的,如果是独立的,就没有必要在异步上下文改造的过程中考虑他。
*
* 也许更好的提问方式是“对final的对象的内部改变进行控制”场景同“上下文的异步改造”场景是否独立,
* 此时的回答是: 不是独立的,“对final的对象的内部改变进行控制”场景 是 “上下文的异步改造”场景 的问题
* 关系成立,因为控制策略会因为同异步的不同而改变。这也是我们在改造中应当特别注意的。
* 并且有些控制场景在异步改造的过程中会异常困难,此时可能会发现,
* 资源本身都必须建立针对某种操作的版本控制机制。
* 由以上分析可以看出,设置final的根本价值在于缩小了考虑问题的范围。确立了分析问题的步骤:
* 1,界定具有final语义的资源
* 2,结合1中资源的状态变迁,分析上下文运行流程等效性,给出具体方案
* 值得一提的是,在异步的环境中,即使我们可能很难要求资源不发生状态变化(
* 就像false share现象),也应该思考下,在这个不可测的变化中,
* 所真正关心的那部分信息变化了么?如果没有,那世界依旧还是美好的。
*
* 删了可惜的注释,存在blog里吧
*/
private final ServiceInstanceKeeper serviceInstanceKeeper = new ServiceInstanceKeeper();
分享到:
相关推荐
Java中,String是final类,不可继承;而Integer是int的封装类,提供了更多的方法。 3. **String与StringBuilder/StringBuffer**: - **String**:不可变对象,一旦创建,内容无法更改,适合少量字符串拼接。 - **...
自己下载了两天才下载到,上传以便程序员们使用;总共有四个压缩文件,需要合并压缩。
C++ 是一种强大的系统级编程语言,它允许程序员直接控制硬件资源,因此在性能要求高的网络应用中很受欢迎。然而,C++ 标准库并没有提供内置的网络编程支持。cpp-netlib 库填补了这一空白,为开发者提供了高效且灵活...
【标题】"Cmsc320---Final-Group-project-源码.rar"是一个与计算机科学相关的项目,可能是一个课程的期末团队作业。这个压缩文件包含了一组源代码,是学生们为完成CMSc320课程(可能是计算机科学或软件工程相关课程...
自己下载了两天才下载到,上传以便程序员们使用;总共有四个压缩文件,需要合并压缩。
《Hibernate 5.0.7.Final:传智播客黑马程序员2016版框架解析》 Hibernate,作为Java领域中的一个强大的对象关系映射(ORM)框架,极大地简化了数据库操作,使得开发者可以使用面向对象的方式处理数据库事务。在...
理解类的构造器、访问修饰符、抽象类和接口、final关键字,以及如何实现多态性,是Java基础中的重点。 5. **异常处理**:Java提供了异常处理机制来处理程序运行时可能出现的问题。try-catch-finally语句块是处理...
"hibernate-distribution-3.5.0-Final-dist" 是这个版本的发行包,包含了所有必要的库文件和API文档,为开发者提供了完整的Hibernate开发环境。 首先,让我们深入了解Hibernate的核心概念。ORM允许程序员用面向对象...
《iOS游戏应用源代码分析——基于“biou-Jump-Puke-ggj-final-28-g9b44dcc”》 iOS游戏开发是移动应用领域的重要组成部分,它结合了苹果设备的高性能与用户友好的界面,为开发者提供了广阔的创新空间。在分析“biou...
这可能采用了FreeMarker、Velocity等技术,允许非程序员也能编辑网站样式。 6. **模块化设计**: JEECMS的模块化设计使得功能可以独立开发和扩展,比如新闻模块、产品模块、评论模块等,每个模块都可以独立部署和...
标题中的"SDN-final-project-master.rar"表明这是一个与软件定义网络(Software Defined Networking,简称SDN)相关的最终项目。SDN是一种新兴的网络架构,它将网络控制平面与数据平面分离,使得网络的管理和控制...
在这个ssd6-final-exam.rar压缩包中,包含了两份重要的学习资料——assm-final-exam-pr和assm-final-exam-mc,它们分别代表了实践部分和多项选择题部分的期末考试内容。下面,我们将详细讨论系统级编程的一些核心...
final关键字的主要作用是限制程序员的某些行为,以免出现不必要的错误。 * final修饰类:当某个类的整体定义为final时,就表明了你不能打算继承该类,且也不允许别人这么做。即这个类是不能有子类的。 * final修饰...
2. **局部变量**:`final`修饰的局部变量必须由程序员显式初始化,并且一旦初始化后不能再次更改。对于基本数据类型,这意味着值不可变;对于引用数据类型,`final`仅保证引用的地址不变,即始终引用同一个对象,但...
`String`不是基本数据类型,而是对象,属于`final`类,不可被继承。`Integer`是`int`的封装类,提供额外的功能,如自动装箱和拆箱。 3. **`int`与`Integer`的区别**:`int`是原始类型,直接存储值;`Integer`是对象...
关于Java中`final`关键字的深入解析及其应用 在Java编程语言中,`final`关键字是一种重要的修饰符,用于限定变量、方法以及类的行为,确保它们的特定特性不会被更改或者覆盖。本文将从以下几个方面详细阐述`final`...
这两个库都是Java程序员处理Excel数据的强大工具,根据项目需求和性能要求,可以选择适合的库进行使用。无论是jxl还是POI,它们都能帮助你轻松地在Java程序中创建、读取和修改Excel文件,实现自动化数据处理。
Java开发过程中,保护代码安全是至关重要的,尤其是对于企业级应用来...在压缩包`classfinal-master`中,可能包含了ClassFinal的源码、文档、示例和使用指南,开发者可以通过研究这些资源更深入地理解和使用这款工具。
《2020-05-u-booting-securely-wp-final.pdf》一文由F-Secure咨询公司的硬件安全团队撰写,深入分析了在安全嵌入式系统中使用U-Boot时可能遇到的问题和挑战,并为开发者提供了关于如何确保U-Boot安全使用的指导建议...
这个“poi-3.10-FINAL.zip”压缩包包含了Apache POI库的主要版本,即3.10-FINAL,该版本允许程序员在Java应用程序中创建、修改和读取Excel(XLS和XLSX)、Word(DOC和DOCX)、PowerPoint(PPT和PPTX)等文件。...