`
atomduan
  • 浏览: 6792 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

焦虑的程序员--关于final

阅读更多
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面试100题目

    Java中,String是final类,不可继承;而Integer是int的封装类,提供了更多的方法。 3. **String与StringBuilder/StringBuffer**: - **String**:不可变对象,一旦创建,内容无法更改,适合少量字符串拼接。 - **...

    petalinux-v2021.2-final-installer.zip-2

    自己下载了两天才下载到,上传以便程序员们使用;总共有四个压缩文件,需要合并压缩。

    cpp-netlib-0.11.1-final

    C++ 是一种强大的系统级编程语言,它允许程序员直接控制硬件资源,因此在性能要求高的网络应用中很受欢迎。然而,C++ 标准库并没有提供内置的网络编程支持。cpp-netlib 库填补了这一空白,为开发者提供了高效且灵活...

    Cmsc320---Final-Group-project-源码.rar

    【标题】"Cmsc320---Final-Group-project-源码.rar"是一个与计算机科学相关的项目,可能是一个课程的期末团队作业。这个压缩文件包含了一组源代码,是学生们为完成CMSc320课程(可能是计算机科学或软件工程相关课程...

    petalinux-v2021.2-final-installer.zip-3

    自己下载了两天才下载到,上传以便程序员们使用;总共有四个压缩文件,需要合并压缩。

    hibernate-release-5.0.7.Final.zip

    《Hibernate 5.0.7.Final:传智播客黑马程序员2016版框架解析》 Hibernate,作为Java领域中的一个强大的对象关系映射(ORM)框架,极大地简化了数据库操作,使得开发者可以使用面向对象的方式处理数据库事务。在...

    JAVA程序员必读--基础篇

    理解类的构造器、访问修饰符、抽象类和接口、final关键字,以及如何实现多态性,是Java基础中的重点。 5. **异常处理**:Java提供了异常处理机制来处理程序运行时可能出现的问题。try-catch-finally语句块是处理...

    hibernate-distribution-3.5.0-Final-dist

    "hibernate-distribution-3.5.0-Final-dist" 是这个版本的发行包,包含了所有必要的库文件和API文档,为开发者提供了完整的Hibernate开发环境。 首先,让我们深入了解Hibernate的核心概念。ORM允许程序员用面向对象...

    iOS游戏应用源代码——biou-Jump-Puke-ggj-final-28-g9b44dcc.zip

    《iOS游戏应用源代码分析——基于“biou-Jump-Puke-ggj-final-28-g9b44dcc”》 iOS游戏开发是移动应用领域的重要组成部分,它结合了苹果设备的高性能与用户友好的界面,为开发者提供了广阔的创新空间。在分析“biou...

    [CMS程序]JEECMS 2.3.2 Final 系统程序_jeecms-2.3.2-final.zip

    这可能采用了FreeMarker、Velocity等技术,允许非程序员也能编辑网站样式。 6. **模块化设计**: JEECMS的模块化设计使得功能可以独立开发和扩展,比如新闻模块、产品模块、评论模块等,每个模块都可以独立部署和...

    SDN-final-project-master.rar

    标题中的"SDN-final-project-master.rar"表明这是一个与软件定义网络(Software Defined Networking,简称SDN)相关的最终项目。SDN是一种新兴的网络架构,它将网络控制平面与数据平面分离,使得网络的管理和控制...

    ssd6-final-exam.rar_SSD6 exam_ssd6

    在这个ssd6-final-exam.rar压缩包中,包含了两份重要的学习资料——assm-final-exam-pr和assm-final-exam-mc,它们分别代表了实践部分和多项选择题部分的期末考试内容。下面,我们将详细讨论系统级编程的一些核心...

    Java 多线程与并发(6-26)-关键字- final详解.pdf

    final关键字的主要作用是限制程序员的某些行为,以免出现不必要的错误。 * final修饰类:当某个类的整体定义为final时,就表明了你不能打算继承该类,且也不允许别人这么做。即这个类是不能有子类的。 * final修饰...

    Java并发--final关键字.docx

    2. **局部变量**:`final`修饰的局部变量必须由程序员显式初始化,并且一旦初始化后不能再次更改。对于基本数据类型,这意味着值不可变;对于引用数据类型,`final`仅保证引用的地址不变,即始终引用同一个对象,但...

    java面试题-后端程序员必备-框架-大厂面试准备.docx

    `String`不是基本数据类型,而是对象,属于`final`类,不可被继承。`Integer`是`int`的封装类,提供额外的功能,如自动装箱和拆箱。 3. **`int`与`Integer`的区别**:`int`是原始类型,直接存储值;`Integer`是对象...

    关于Final的用法

    关于Java中`final`关键字的深入解析及其应用 在Java编程语言中,`final`关键字是一种重要的修饰符,用于限定变量、方法以及类的行为,确保它们的特定特性不会被更改或者覆盖。本文将从以下几个方面详细阐述`final`...

    jxl.jar,poi-3.0.1-FINAL.rar

    这两个库都是Java程序员处理Excel数据的强大工具,根据项目需求和性能要求,可以选择适合的库进行使用。无论是jxl还是POI,它们都能帮助你轻松地在Java程序中创建、读取和修改Excel文件,实现自动化数据处理。

    Netty-4.1.97.Final源码

    Netty-4.1.97.Final源码提供了对Netty内部机制的深度洞察,对于Java程序员尤其是希望提升网络编程能力或进行定制化开发的人来说,是一份极其宝贵的资料。 首先,让我们从整体上了解Netty的架构设计。Netty采用了...

    ClassFinal是一款java class文件安全加密工具

    Java开发过程中,保护代码安全是至关重要的,尤其是对于企业级应用来...在压缩包`classfinal-master`中,可能包含了ClassFinal的源码、文档、示例和使用指南,开发者可以通过研究这些资源更深入地理解和使用这款工具。

    2020-05-u-booting-securely-wp-final.pdf

    《2020-05-u-booting-securely-wp-final.pdf》一文由F-Secure咨询公司的硬件安全团队撰写,深入分析了在安全嵌入式系统中使用U-Boot时可能遇到的问题和挑战,并为开发者提供了关于如何确保U-Boot安全使用的指导建议...

Global site tag (gtag.js) - Google Analytics