多线程:Immutable对象?如何创建Immutable对象?
那么什么是immutable objects?什么又是mutable Objects呢?
immutable Objects就是那些一旦被创建,它们的状态就不能被改变的Objects,每次对他们的改变都是产生了新的immutable的对象,而mutable Objects就是那些创建后,状态可以被改变的Objects.
举个例子:
String和StringBuilder,String是immutable的,每次对于String对象的修改都将产生一个新的String对象,而原来的对象保持不变,而StringBuilder是mutable,因为每次对于它的对象的修改都作用于该对象本身,并没有产生新的对象。
但有的时候String的immutable特性也会引起安全问题,这就是密码应该存放在字符数组中而不是String中的原因!
使用Immutable对象的好处?
1)Immutable对象是线程安全的,可以不用被synchronize就在并发环境中共享
2)Immutable对象简化了程序开发,因为它无需使用额外的锁机制就可以在线程间共享
3)Immutable对象提高了程序的性能,因为它减少了synchroinzed的使用
总的来说,本身就是线程安全的,避免了synchronized的使用。
如何在Java中写出Immutable的类?
要写出这样的类,需要遵循以下几个原则:
1)immutable对象的状态在创建之后就不能发生改变,任何对它的改变都应该产生一个新的对象。(克隆)
2)Immutable类的所有的属性都应该是final的。(属性初始化后不能被修改)
3)对象必须被正确的创建,比如:对象引用在对象创建过程中不能泄露(leak)。
4)对象应该是final的,以此来限制子类继承父类,以避免子类改变了父类的immutable特性。
5)如果类中包含mutable类对象,那么返回给客户端的时候,返回该对象的一个拷贝,而不是该对象本身(该条可以归为第一条中的一个特例)
如何创建Immutable对象?
多线程:Immutable对象?如何创建Immutable对象?相关推荐
- 浅析Java中对象的创建与对象的数据类型转换
这篇文章主要介绍了Java中对象的创建与对象的数据类型转换,是Java入门学习中的基础知识,需要的朋友可以参考下 Java:对象创建和初始化过程 1.Java中的数据类型 Java中有3个数据 ...
- java对象的访问定位_2、JVM-Java对象的创建、对象结构、对象访问定位-Go语言中文社区...
目录 记录下来方便个人学习复习 注:根据new的参数在常量池中定位一个类的符号引用 --这句话的意思是:常量池相当于c语言中的指针地址集合,所以就是在常量池中保存new对象的地址,通过地址定位对象在堆 ...
- 使用工厂模式创建收件地址ReceiveAddress 订单对象,创建 若干对象 (属性自定义)
设计Account账户类Account账户类有以下属性 accNo //账户账号 accName //账户姓名 accPassword //账户密码 accTelno //账户手机号 accBalan ...
- sqlserver2008未将对象引用设置到对象的实例_JVM | Java对象的创建、存储和访问详解...
引言 Java程序员都知道如何创建对象,不就是一个Person person = new Person()的语句就解决了么?然而,我们只知道new,却对于底层如何实现对象的创建.如何存储到内存中去 ...
- 【Kotlin】Kotlin 构造函数 ( 主构造函数 | 主构造函数声明属性 | init 初始化代码块 | 次构造函数 | 构造函数委托 | 调用构造函数创建实例对象 )
文章目录 I . 主构造函数 II . 主构造函数声明属性 III . init 初始化代码块 IV . 主构造函数参数 和 成员变量访问方式 V . 主构造函数 可见性 设置 VI . 次构造函数 ...
- html如何创建学生信息表,创建学生对象并且能访问网页
讲解对象:创建学生对象并且能访问网页 作者:融水公子rsgz 1 templates下面新建两个网页 grades.html 内容: charset="UTF-8"> 班级信 ...
- 在 Java 中,为什么需要创建内部类对象之前需要先创建外部类对象
在 Java 中,为什么需要创建内部类对象之前需要先创建外部类对象 我们知道,在 Java 中,创建一个内部类对象之前,需要它的一个外部类对象.这是因为内部类可能使用外部类的数据. 在内部类中 ...
- Ajax入门(创建 XMLHttpRequest 对象)
XMLHttpRequest 是 AJAX 的基础. 所有现代浏览器均支持 XMLHttpRequest 对象(IE5 和 IE6 使用 ActiveXObject). XMLHttpRequest ...
- c++类对象的创建方式
对象创建限制在堆或栈 c++类对象的创建方式 对象创建限制在堆或栈 C++ 中的类的对象的建立模式 如何将类限制在堆上呢? C++ 中的类的对象的建立模式 C++ 中的类的对象的建立模式分为两张:静态 ...
- python类的定义和创建_Python类对象的创建和使用
通过前面章节的学习,我们已经学会如何定义一个类,但要想使用它,必须创建该类的对象. 创建类对象的过程,又称为类的实例化. 类名(参数) 定义类时,如果没有手动添加 __init__() 构造方法,又或 ...
最新文章
- IT兄弟连 JavaWeb教程 JSON和JSON字符串
- Android activity-alias 的使用
- HDU4372(第一类斯特林数)
- IDEA如何像Eclipse打开多个项目?
- GStreamer1.0中no element “ffmpegcolorspace”报错解决(八)
- allegro怎么导出PCB文件里封装
- promise执行顺序总结
- 办公技巧分享:如何把PDF转换成Word的5种方法
- DNS主域名服务器、从域名服务器和缓存域名服务器的构建和原理
- 温湿度传感器—HDC1080
- 【Web】HTML(No.06)表格标签经典案例《小说排行榜》
- 空指针带来的AV异常.
- 软件工程专业四年注意事项以及学习计划
- 11部中考常考的名著思维导图汇总
- 协方差,协方差矩阵,矩阵特征值
- 【考研复试】计算机相关专业面试英语自我介绍范文(一)
- 使用Makefile链接so库文件
- 前端白屏出现的原因及一些解决方式
- 明翰经验系列之恋爱篇V5.6(持续更新)
- 微信小程序导航栏或菜单栏吸顶效果简单实现