设计模式 单例模式
使用场景:全局 ID
生成器
实现代码
class Foo {
private volatile Helper helper = null;
public Helper getHelper() {
if (helper == null) {
synchronized (this) {
if (helper == null)
helper = new Helper();
}
}
return helper;
}
}
原因:会出现指令重排的问题
- 给
helper
对象分配内存 - 调用构造函数
- 将
helper
对象指向分配的内存空间
另外三种存在的情况
- 懒汉模式
- 正常单线程进行使用
- 不会提前构造实例
- 饿汉模式
- 提前构造实例
- 不使用
volatile
情况- 即标准方法里面不使用
volatile
会出现的指令重排的问题
- 即标准方法里面不使用
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论