`

JDK设计篇--不变模式

    博客分类:
  • JDK
阅读更多

说设计模式,如果只是讲理论,估计很多人都会理解不透彻,今天我们结合JDK的源码设计,一块来说下设计模式中的不变模式.

 

1.什么是不变模式?

在并发程序中,为了保证临界区资源使用时不受其他线程干扰,使用锁控制可能是必不可少的,而同步锁控制会使系统的性能有所下降,为了尽可能提高并行程序的性能,我们可以使用一种不可改变的对象,依靠对象的不可变性,从而实现去锁操作,可以确保在多线程高并发情况下可以保持临界区资源的一致性,这就是不变模式.

说白了,不变模式,就是在对象创建完成后,不能再改变(我突然想起了小时候拉钩说的话),它的核心思想就是,一个对象一旦被创建,则它的内部状态就不允许再改变,基于这些特性,我们可以确定,不变模式对多线程是友好的,不需要进行同步锁控制.

 

2.不变模式的使用场景

根据不变模式的定义,我们可以大概猜出不变模式的应用场景:

①当对象创建后,不允许其他外部环境修改其内部状态和数据

②对象可以共享,即在多线程高并发情况下,可以被频繁访问.

不变模式在JDK中的应用很广泛,我们常用的String类,以及基本数据类型的包装类,如Integer,Boolean等等,都是使用不变模式实现的.那不变模式有哪些特征呢?

 

3.不变模式的实现特征

①类被定义为final,即该类不存在子类,也就防止了子类重载后修改父类的方法.[如public final class String]

②将所有的属性设置为private final,确保一次设置后不会再被修改

③去掉属性的setter方法以及所有可以修改对象属性的方法

④有一个可以创建完整对象的构造函数.

以上4点,我们使用String类来说明不变模式的实现.

 

4.源码展示

在JDK中,不变模式的应用很广泛,我们使用String类来说明,其他类如包装类的源码类似,大家可以自行研究.

①类被定义为final,即该类不存在子类,也就防止了子类重载后修改父类的方法.

在String类中,我们看下它的定义.


 很明显,String类被定义为了不可变类,有不清楚final的,大家可以去看Java基础.

②将所有的不可变属性设置为private final,确保一次设置后不会再被修改



 

 
我们可以看到,在Boolean和String类中,不可变的属性都被用private final修饰,保证属性设置为私有,且只被设置一次.

③去掉属性的setter方法以及所有可以修改对象属性的方法



 ④有一个可以创建完整对象的构造函数.


 

从以上可以看出,基本数据类型的包装类都是用不变模式实现的.所以,想学习不变模式,那就看基本包装类吧.

 

  • 大小: 4.5 KB
  • 大小: 11.4 KB
  • 大小: 21.5 KB
  • 大小: 18.4 KB
  • 大小: 36.5 KB
分享到:
评论

相关推荐

    bcprov-jdk15on-1.68-API文档-中文版.zip

    赠送jar包:bcprov-jdk15on-1.68.jar; 赠送原API文档:bcprov-jdk15on-1.68-javadoc.jar; 赠送源代码:bcprov-jdk15on-1.68-sources....人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

    bcprov-jdk15on-1.59-API文档-中英对照版.zip

    赠送jar包:bcprov-jdk15on-1.59.jar; 赠送原API文档:bcprov-jdk15on-1.59-javadoc.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。 双语对照,边学技术、边学英语。

    bcprov-jdk15on-1.60-API文档-中文版.zip

    赠送jar包:bcprov-jdk15on-1.60.jar; 赠送原API文档:bcprov-jdk15on-1.60-javadoc.jar; 赠送源代码:bcprov-jdk15on-1.60-sources....人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

    bcpkix-jdk15on-1.68-API文档-中英对照版.zip

    赠送jar包:bcpkix-jdk15on-1.68.jar; 赠送原API文档:bcpkix-jdk15on-1.68-javadoc.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。 双语对照,边学技术、边学英语。

    bcmail-jdk15on-1.58,bcprov-jdk15on-1.58,bcpkix-jdk15on-1.58

    包含 bcmail-jdk15on-1.58,bcprov-jdk15on-1.58,bcpkix-jdk15on-1.58 3个jar

    bcprov-jdk15on-1.52-API文档-中文版.zip

    赠送jar包:bcprov-jdk15on-1.52.jar; 赠送原API文档:bcprov-jdk15on-1.52-javadoc.jar; 赠送源代码:bcprov-jdk15on-1.52-sources....人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

    bcprov-jdk15on-1.68-API文档-中英对照版.zip

    赠送jar包:bcprov-jdk15on-1.68.jar; 赠送原API文档:bcprov-jdk15on-1.68-javadoc.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。 双语对照,边学技术、边学英语。

    bcprov-jdk15on-1.54.jar bcprov-ext-jdk15on-1.54.jar下载

    2.将下载的两个JAR文件复制到:JDK安装目录\jre\lib\ext下,例如我的就是D:\Program Files (x86)\java\JDK1.6\jre\lib\ext 3.打开java.security文件:在JDK安装目录\jre\lib\security下的java.security文件。

    bcpkix-jdk15on-1.68-API文档-中文版.zip

    赠送jar包:bcpkix-jdk15on-1.68.jar; 赠送原API文档:bcpkix-jdk15on-1.68-javadoc.jar; 赠送源代码:bcpkix-jdk15on-1.68-sources....人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

    bcprov-jdk15on-1.60-API文档-中英对照版.zip

    赠送jar包:bcprov-jdk15on-1.60.jar; 赠送原API文档:bcprov-jdk15on-1.60-javadoc.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。 双语对照,边学技术、边学英语。

    bcprov-jdk15on-1.59-API文档-中文版.zip

    赠送jar包:bcprov-jdk15on-1.59.jar; 赠送原API文档:bcprov-jdk15on-1.59-javadoc.jar; 赠送源代码:bcprov-jdk15on-1.59-sources....人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

    bcpkix-jdk15on-1.56/bcprov-jdk15on-1.56

    bcpkix-jdk15on-1.56 好用

    bcprov-ext-jdk15on-1.54.jar和bcprov-jdk15on-1.54.jar压缩文件

    bcprov-ext-jdk15on-1.54.jar和bcprov-jdk15on-1.54.jar压缩文件

    bcprov-ext-jdk15on-1.54.jar和bcprov-jdk15on-1.54.jar

    该压缩文件包含bcprov-ext-jdk15on-1.54.jar和bcprov-jdk15on-1.54.jar,bcprov-jdk15on-154中移除了一些加密算法,bcprov-ext-jdk15on-154中依然保留。可以解决JDK1.6 HttpClient访问https网页报的错

    bcpkix-jdk15on-1.59-API文档-中文版.zip

    赠送jar包:bcpkix-jdk15on-1.59.jar; 赠送原API文档:bcpkix-jdk15on-1.59-javadoc.jar; 赠送源代码:bcpkix-jdk15on-1.59-sources....人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

    java-jdk1.8-8u361-all-jdk-win-linux

    java-jdk1.8-8u361-all-jdk-win-linux 该压缩包中包含jdk1.8-8u361下windows版本和linux版本,其包含快速安装包和对应的jdk压缩包版本,具体内容如下: jdk-8u361-linux-aarch64.rpm jdk-8u361-linux-i586.rpm jdk-8...

    bcprov-jdk15on-1.58-API文档-中文版.zip

    赠送jar包:bcprov-jdk15on-1.58.jar; 赠送原API文档:bcprov-jdk15on-1.58-javadoc.jar; 赠送源代码:bcprov-jdk15on-1.58-sources....人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

    bcpkix-jdk15on-1.60-API文档-中文版.zip

    赠送jar包:bcpkix-jdk15on-1.60.jar; 赠送原API文档:bcpkix-jdk15on-1.60-javadoc.jar; 赠送源代码:bcpkix-jdk15on-1.60-sources....人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

    bcprov-jdk15on-1.54.jarr和bcprov-ext-jdk15on-1.54.jar和教程.rar

    bcprov-jdk15on-1.54.jarr和bcprov-ext-jdk15on-1.54.jar和教程 win10 64位 java1.8连接SQL Server2008报错 驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接

    bcprov-jdk15on-1.64.jar

    ECC 加密工具jar包 bcprov-jdk15on-1.64.jarbcprov-jdk15on-1.64.jarbcprov-jdk15on-1.64.jarbcprov-jdk15on-1.64.jarbcprov-jdk15on-1.64.jar

Global site tag (gtag.js) - Google Analytics