多线程编程的设计模式 不变模式(一)
虽然这个模式的名称已经有人介绍过,但我仍然要以我的方式来介绍它,因为我对这个模式要说的
东西比现有的我所能看到的介绍更全面更深入.
一.不变模式需要的基础.
模式虽然显得高深,但学习它的难度很低,即使你只是一个中级水平的程度员,也可以在很短的时候
学会一个模式(当然要能正确地运用那需要丰富的经验积累).对于基础知识的深入才是一个优秀的
程序员所具备有必要条件.
我下面要说的话不是说国内没有基础深厚的java技术人员,而是说没有基础深厚却又能说清楚让别
人也深厚起来的人.简单说高手随处可见,但可以做师父的高手我没有见到.那么就让我这个不是高
手的人来补一堂Java最最基础的知识吧.
基础类型和引用类型的内存布局:
int x = 1;
int y = x;
x ++;
System.out.println(y);
有99.99%的Java程序员都知道y为1.当把类型为int的变量x作为类型为y的变量的值时,堆栈中会产生一个与x同样大小的值,但无法改变它们是两个不同的副本事实.它们互不相关,仅仅是在”创建” y的依据,完成后它们之间没有任何关系,既然没有任何关系,当然修改其中一个就不会影响另一个.这时它们有内存布局为:
为了简化说明引用类型我们用Integer来作为例子.它的值作为它最重要的属性被表示出来:
Integer x = new Integer(100);
Integer y = x;
这时正确的表述为产生了两个指向同一对象的变量(或引用).只要看它们的内存而局就知道它们的意义了:
对于引用类型,改变引用本身并不影响其它指向同一对象的引用,改变引用本身就是把引用指点向另一个对象,简单说就是重新赋值.假如 x = new Integer(101);那么它并不影响y指向原来的100.
但改变对象的内容则同时影响其它指向同一引用的变量,因为Integer被设计为不变模式,所以我们目前不能修改它的内容,也就是不能个性100为101.下面的内容中会介绍修改对象内容.
对于引用参数传递,方法外的引用和方法内的引用虽然变量名在语法相同,但实际变量本身因为作用范围原因是不
同的,但它们都指向同一对象.
StringBuffer sb = new StringBuffer("xxxx");
amethod(sb){
}
这是发生的内存而局如下:
在没有以不变模式来介绍String的时候,我们先来看String类的其它几个属性,其实String类要说的东西太多,这里只说几个必要的知识:
String s1 = “1111”;
String s2 = “1111”;
String 是唯一可以直接赋常量值的类(这只是对于程序员而言,也就从语法而言),对于这样的字面值赋值,其底层就是调用String s1 = new String(“1111”). .intern();
即先在字符串缓存池中查找是否有字符常量”1111”,如果有测将s1指向这个对象.没有则先创建对象放入字符串缓存池,然后将s1指向它,并销毁堆中的对象,当String s2 = “1111”;时仍然是调用
String s2 = new String(“1111”). .intern();这时已经找到字符常量”1111”,所以s2也指向了字符串缓存池中那个对象,并销毁了堆中的”1111”,这样做的结果就是直接赋字面值的语句如果字面值相同它们就都指向同一对象.
因为字符串类是不变模式最典型的代表,所以其它的知识将在下面继续介绍.
分享到:
相关推荐
之道 》,其中很多观点我看了很受启发,以前我也将"设计模式" 看成一个简单的解决方案,没有从一种高度来看待"设计模式"在软 件中地位,下面是我自己的一些想法: 建筑和软件某些地方是可以来比喻的 特别是中国传统建筑...
**C#设计模式第二版PPT**是一套深入解析C#编程中设计模式的教育资料,旨在帮助开发者提升代码质量,提高软件设计能力。设计模式是面向对象编程中的一种最佳实践,是解决常见问题的经验总结,是软件开发中的重要工具...
设计模式不仅是一种编程技巧的集合,更是一种思维方式的体现。掌握设计模式可以帮助开发者更好地理解和构建复杂的软件系统,提高代码的可重用性和可维护性。 #### 0.2 设计模式解析后记 在深入研究设计模式的过程...
《JAVA设计模式》是一本深入探讨Java编程中设计模式的宝贵资源。设计模式是软件开发中的通用解决方案,它们是经过时间验证的、在特定场景下解决问题的最佳实践。这本书的.chm格式表明它可能是一个帮助文件或电子书,...
在Java中,我们可以使用内置的java.util.Observable和java.util.Observer接口来实现这一模式,比如事件驱动编程中的按钮点击事件处理。 接下来,装饰器模式是一种结构型设计模式,允许动态地给一个对象添加新的行为...
单例模式是一种常用的创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点。单例模式非常适合用于那些需要在整个系统中唯一存在的对象,例如数据库连接池、线程池或者配置对象等。 在Java中,单例模式...
Linux多线程编程是操作系统领域中的一个重要知识点,它在Linux系统中是通过多线程来实现程序的并发执行。多线程编程相比传统的单线程模型,可以更好地利用现代多核处理器的计算能力,提高程序的执行效率和响应速度。...
"C#设计模式"这一主题,特别是"设计模式的思想:对通用的对象间的相互作用方式进行记录和编目",主要探讨了如何在C#编程环境中应用这些通用模式。 设计模式的出现源于对良好软件设计原则的追求,包括可重用性、灵活...
《Android源码设计模式解析与实战》是一本深入探讨Android系统源码中设计模式应用的专业书籍。这本书旨在帮助开发者理解Android系统内部的工作机制,并通过实际案例来应用和掌握设计模式,提升开发技能和代码质量。 ...
在多线程环境下,单例模式需要考虑线程安全问题,C++中可以使用静态成员函数或std::call_once来实现。 2. **工厂模式**:提供一个创建对象的接口,但让子类决定实例化哪一个类。工厂模式是一种创建型设计模式,它将...
设计模式是软件工程中的一种最佳实践,用于解决在软件开发过程中常见的设计问题。它们是经过时间验证、可重用的解决方案模板,可以帮助开发者更高效地设计和实现软件系统。本资料包“设计模式 示例代码”提供了多种...
《Head First设计模式》是一本深受开发者喜爱的设计模式教程,其高清中文版为中国的程序员们提供了深入理解设计模式的便利。这本书以独特的视觉和轻松易懂的方式解释了23种经典的GoF设计模式,旨在帮助读者提升软件...
Java设计模式是软件工程中的一种最佳实践,它是一种在特定情境下解决常见问题的经验总结,目的是提高代码的可重用性、可维护性和灵活性。在Java编程中,设计模式被视为提升软件质量的重要工具,尤其对于大型项目,...
设计模式是软件开发中的宝贵经验总结,它们是解决常见问题的最佳实践,被广泛应用于各种编程语言,包括C#。在C#中应用设计模式可以提高代码的可读性、可维护性和可复用性,是成为一名优秀的C#开发者不可或缺的知识。...
【C++设计模式-单实例】是C++编程中一种重要的设计模式,它涉及到软件设计中的对象创建和管理。设计模式是一种在特定场景下解决常见问题的模板,它基于前人的经验总结,使得代码可读性更强,也更易于重用。在C++中,...
除了这23种模式,还有并发型模式和线程池模式,这些模式在多线程编程中尤其重要,用于管理和优化线程资源。 设计模式遵循六大原则: 1. 开闭原则:软件实体(类、模块、函数等)应对扩展开放,对修改关闭。 2. 里氏...
策略设计模式是一种行为设计模式,它使算法族可以彼此独立变化,同时让代码使用这些算法的方式保持不变。洛基库通过模板技术实现了这一模式,允许用户在运行时选择不同的策略或算法,提高了代码的灵活性和可扩展性。...
在C#编程语言中,设计模式的应用可以帮助我们编写出更灵活、可维护和可扩展的代码。本篇文章将深入探讨标题"设计模式Demo C#"所涵盖的一些关键设计模式,并通过代码示例来阐述其原理和应用场景。 首先,单例...
在Java编程中,设计模式的应用非常广泛,它可以帮助开发者构建更加健壮和灵活的系统。在"设计模式.docx.zip"这个压缩包中,虽然没有提供具体的标签,但我们可以推测其内容可能涵盖了多种常见的设计模式以及它们在...