浏览 1454 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-06-26
public class Test { private static Test test = null; private Test() { } public static Test getInstance() { if (test == null) { test = new Test(); } return test; } } 上面单例模式代码,采用延迟加载,在需要的时候再生成实例.但是多线程的情况可能会产生去多个实例. //多线程同时访问下面代码.会产生多个实例 public static Test getInstance() { if (test == null) { test = new Test(); } return test; } 同步单例模式 public class Test { private static Test test = null; private Test() { } public synchronized static Test getInstance() { if (test == null) { test = new Test(); } return test; } } 上面同步单例模式代码,可以防止多线程下产生多个实例,但是同步这个方法会让程序执行性能下降. 双重加锁单例模式 public class Test { //volatile标示,多程线下变量不能同时修改 private volatile static Test test = null; private Test() { } public static Test getInstance() { //只有当实例不存在的时候,才执行同步代码块.生成实例.缩小同步范围提高性能 if (test == null) { synchronized(Test.class){ if(test==null){ test = new Test(); } } } return test; } } 急切实例化单例模式 public class Test { //直接初始化静态变量 private static Test test = new Test(); private Test() { } public static Test getInstance() { return test; } } 上面急切实例化单例模式,不同的类加载器,可能会产生多个实例.需要时指定类加载器. 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |