Immutable-不变模式与不变类】的更多相关文章

一.简单定义不可变对象(Immutable Objects)即对象一旦被创建,它的状态(对象的数据,也即对象属性值)就不能改变,反之即为可变对象(Mutable Objects).当满足以下条件时,对象才是不可变的:1. 对象创建以后其状态就不能修改.2. 对象的所有域都是final类型.3. 对象是正确创建的(在对象的创建期间,this引用没有逸出).不可变对象的类即为不可变类(Immutable Class).Java平台类库中包含许多不可变类,如String.基本类型的包装类.BigInt…
http://www.iteye.com/topic/959751 最近老有人问我不变模式,我其实也理解得不深,于是花了一些时间进行学习总结,分析了一下不变模式(immutable pattern),和大家一起分享.说得不对的地方欢迎拍砖,谢绝谩骂.姐妹篇:精通有状态vs无状态(Stateful vs Stateless).http://www.iteye.com/topic/960532 不变模式(immutable pattern) 一个类的内部状态创建后,在整个生命期间都不会发生变化时,就…
在阎宏博士的<JAVA与模式>一书中开头是这样描述不变(Immutable)模式的: 一个对象的状态在对象被创建之后就不再变化,这就是所谓的不变模式. 不变模式的结构 不变模式可增强对象的强壮型(robustness).不变模式允许多个对象共享某一个对象,降低了对该对象进行并发访问时的同步化开销.如果需要修改一个不变对象的状态,那么就需要建立一个新的同类型对象,并在创建时将这个新的状态存储在新对象里. 不变模式只涉及到一个类.一个类的内部状态创建后,在整个生命周期都不会发生变化时,这样的类称作…
在阎宏博士的<JAVA与模式>一书中开头是这样描述不变(Immutable)模式的:一个对象的状态在对象被创建之后就不再变化,这就是所谓的不变模式. 不变模式的结构 不变模式可增强对象的健壮性(robustness).不变模式允许共享某一个对象,降低了并发访问该对象的同步开销.如果需要修改一个不变对象的状态,则需要建立一个新的同类型对象,并在创建时把这个新的状态存储在新对象里.不变模式只涉及到一个类.一个类的内部状态创建后,在整个生命周期都不会发生变化,这样的类称为不变类.使用不变类的做法叫不…
在阎宏博士的<JAVA与模式>一书中开头是这样描述不变(Immutable)模式的: 一个对象的状态在对象被创建之后就不再变化,这就是所谓的不变模式. 不变模式的结构 不变模式可增强对象的强壮型(robustness).不变模式允许多个对象共享某一个对象,降低了对该对象进行并发访问时的同步化开销.如果需要修改一个不变对象的状态,那么就需要建立一个新的同类型对象,并在创建时将这个新的状态存储在新对象里. 不变模式只涉及到一个类.一个类的内部状态创建后,在整个生命周期都不会发生变化时,这样的类称作…
不变模式的定义 一个对象在创建之后就不再变化,就是所谓的不变模式(Immutable Pattern): 一般来讲,一个对象要么就是可变对象(Mutable Object),要么就是不变模式(Immutable Object); 不变模式的结构 不变模式可增强对象的强壮性.不变模式允许多个对象共享某个对象,降低了对该对象进行并发访问(Concurrent Access)时的同步化开销.如果需要修改一个对象,就需要建立一个新的同类型对象,并在创建时将这个新的状态存储在新对象里. 不变模式只涉及到一…
多线程共享变量的情况下,为了保证数据一致性,往往需要对这些变量的访问进行加锁.而锁本身又会带来一些问题和开销.Immutable Object模式使得我们可以在不使用锁的情况下,既保证共享变量访问的线程安全,又能避免引入锁可能带来的问题和开销. Immutable Object模式简介 多线程环境中,一个对象常常会被多个线程共享.这种情况下,如果存在多个线程并发地修改该对象的状态或者一个线程读取该对象的状态而另外一个线程试图修改该对象的状态,我们不得不做一些同步访问控制以保证数据一致性.而这些同…
Java并发编程中,用到了一些专门为并发编程准备的 Annotation.主要包括三类: <dependency> <groupId>net.jcip</groupId> <artifactId>jcip-annotations</artifactId> <version>1.0</version> </dependency> 注解包含以下类 1.类 Annotation(注解)就像名字一样,这些注解是针对类的…
多线程共享变量的情况下,为了保证数据一致性,往往需要对这些变量的访问进行加锁.而锁本身又会带来一些问题和开销.Immutable Object模式使得我们可以在不使用锁的情况下,既保证共享变量访问的线程安全,又能避免引入锁可能带来的问题和开销. Immutable Object模式简介 多线程环境中,一个对象常常会被多个线程共享.这种情况下,如果存在多个线程并发地修改该对象的状态或者一个线程读取该对象的状态而另外一个线程试图修改该对象的状态,我们不得不做一些同步访问控制以保证数据一致性.而这些同…
Java 不可变类 immutable object 不可变类是指这个类的实例一旦创建完成后,就不能改变其成员变量值. 如JDK内部自带的很多不可变类:Interger.Long和String等. ** 不可变类,指的是 该类的实例不可变,而非指向该实例的引用的不可变** 优点 线程安全 当一个对象是不可变的,那么需要拷贝这个对象的内容时,就不用复制它的本身而只是复制它的地址,复制地址(通常一个指针的大小只需要很小的内存空间,具有非常高的效率.同时,对于引用该对象的其他变量也不会造成影响. 此外…