文档章节

1. java单例模式总结

向问天
 向问天
发布于 2015/09/22 10:50
字数 354
阅读 8
收藏 0

1. 使用场景

确保一个类最多只有一个实例,并且提供一个全局访问点。用于多实例造成冲突的情况,例如线程池、缓存、硬件设备。

2. 代码示例

2.1 生成实例时添加synchronized同步锁

//单例模式,问题点:如果经常调用,比较消耗资源。
public class Singleton(){
public static Singleton uniqueInstance = null;

private Singleton(){

}
//比较粗暴,偶尔可以使用
public static synchronized Singleton getInstance(){
    if(uniqueInstance == null){
        uniqueInstance = new Singleton();
        }
        return uniqueInstance;
}
}

2.2 急切 创建实例

//提前生成对象且一直保存,根据情况使用,比较简单
public class Singleton(){
public static Singleton uniqueInstance = new Singleton();

private Singleton(){

}

public static synchronized Singleton getInstance(){
    if(uniqueInstance == null){
        //uniqueInstance = new Singleton();
        }
        return uniqueInstance;
}

2.3 双重检查加锁法

public class Singleton(){
//volatile不要忘记,防止编译器对代码进行优化,
//优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。
public volatile static Singleton uniqueInstance = null;

private Singleton(){

}

public static Singleton getInstance(){
    if(uniqueInstance == null){
    //解决多线程问题,同步锁只执行一次,此例最好。
            synchronized(Singleton.class) if(uniqueInstance == null){
                uniqueInstance = new Singleton();
                }
      }
        return uniqueInstance;
}






© 著作权归作者所有

共有 人打赏支持
向问天
粉丝 1
博文 27
码字总数 13464
作品 0
九龙坡
程序员
私信 提问
加载中

评论(1)

天山4662
79
为什么java中用枚举实现单例模式会更好

枚举单例是java中使用枚举提供一个实例对象来实现单例模式的一种新方法,虽然单例模式在java中早已存在,但枚举单例实际上从java5引入枚举作为它的关键特性之后相对来说还是一个新的概念,这...

zhoujy
2013/06/01
0
0
设计模式 2014-12-19

book: 阎宏《JAVA与模式》 架构设计栏目 http://blog.csdn.net/enterprise/column.html 概要: http://bbs.csdn.net/forums/Embeddeddriver 23种设计模式分别是: 1.单例模式 2.工厂方法模式...

jayronwang
2014/12/19
0
0
设计模式15——Template Method设计模式

Template Method模板方法设计模式定义一个操作中算法的骨架,将具体步骤的执行延迟到子类中实现。Java中的抽象类就是使用了模板方法设计模式。模板方法设计模式结构如下: 以文档处理为例,T...

小米米儿小
2014/01/24
0
0
策略模式与SPI机制,到底有什么不同?

这里说的策略模式是一种设计模式,经常用于有多种分支情况的程序设计中。例如我们去掉水果皮,一般来说对于不同的水果,会有不同的拨皮方式。此时用程序语言来表示是这样的: 如上面代码所写...

陈树义
2018/09/03
0
0
java中23种设计模式(上)

参考网址:http://blog.csdn.net/zhangerqing 资源:http://download.csdn.net/detail/zhangerqing/4835830 设计模式(Design Patterns) 设计模式(Design pattern)是一套被反复使用、多数...

青涩的梦
2018/06/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

双亲委派模型

双亲委派模型的工作流程是: 如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把请求委托给父加载器去完成,依次向上,因此,所有的类加载请求最终都应该被传递到...

无精疯
10分钟前
0
0
原 分布式项目(三)CoAp

上回说到Web manage的构建,完成的对产品,物模型中的数据,设备数据,并把对应的数据缓存到redis中,接下来就开始coap客户端和服务器的构建。 coap 现阶段PC网络交互中较多的是使用tcp和htt...

lelinked
10分钟前
0
0
next.js 提示 chunk styles [mini-css-extract-plugin]

会出现css 导入警告 导入两个插件 并在next.config.js 配置 yarn add webpack-filter-warnings-pluginyarn add mini-css-extract-plugin const FilterWarningsPlugin = require('webpack-......

一箭落旄头
50分钟前
2
0
AWS的自动部署codeploy 应用程序规范文件

codedeploy应用程序的规范文件 ECS平台上的应用规范文件: AppSpec file也可以是 YAML 或 JSON 格式的,可以直接写入控制台内的编辑器内。 AppSpec file用于指定: 用于将流量定向到新任务集...

守护-创造
57分钟前
1
0
Confluence 6 超过当前许可证期限进行升级

这个页面将会对你在进行 Confluence 升级的时候超过了当前许可证的期限进行升级的情况。 许可证警告 在升级的过程中,你将会在 Confluence 的应用程序日志(log file)中看到类似下面的错误提...

honeymoose
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部