游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1149|回复: 0

Lazy Singleton的Java实现 wxh zt

[复制链接]

1367

主题

1993

帖子

2118

积分

金牌会员

Rank: 6Rank: 6

积分
2118
发表于 2005-11-18 21:08:00 | 显示全部楼层 |阅读模式


作者:asklxf  

由于Java的内存模型的原因,在C++中的双重检查模型在Java中不可用:

public static Singleton getInstance() {    if(instance==null) {        synchronized(this) {            if(instance==null) {                instance=new Singleton();            }        }    }    return instance;}
如果采用synchronized方法,又会严重影响性能:

public static synchronized Singleton getInstance() {    if(instance==null) {        instance=new Singleton();    }    return instance;}
如何实现Lazy Singleton?方法是利用Java的ClassLoader即时装载特性,使用一个SingletonHolder实现:

static class SingletonHolder {    static Singleton instance = new Singleton();}
public static Singleton getInstance() {    return SingletonHolder.instance;}
这里利用Java ClassLoader特性,在第一次加载SingletonHolder的时候初始化实例,并且保证了没有多线程并发问题。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-22 16:39

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表