浅析单例模式

weixin_45490482 2019-09-11 01:07:10
单例设计模式我现在知道的有4种。 1.饿汉式 代码如下 第一步 把无参构造私有化 pribate Singleton (){} 第二步 创建一个实例化对象作为类变量 private static Singleton singleton = new Singleton(); 第三步 对外提供访问方法 public static Singleton getInstance (){ return Singleton; } 第二种方式 延迟加载,也称懒加载。访问时会有线程安全问题,加一个同步锁可以解决,但访问效率会降低。 pribate Singleton (){} pribate static Singleton s = null ; public static Singleton getInstance(){ if(s==null){ synchonized(Singleton.class){ s=new Singleton(); } } return s; } 3静态代码块方式 private static Singleton singleton; static{ singleton = new Singleton(); } public static Singleton getInstance (){ return singleton; } 四匿名内部类的方式,这种方式最优。Outer 外部类加载的时候内部类不会加载,当外部类去调用静态方法或者变量的时候才会初始化。不会占用内寸,调用的时候才初始化。效率也高。 private static class Singleton{ privte static Singleton singleton = new Singleton(); } private static Singleton getInstance (){ return Outer.singleton; } 以上就是设计单例模式的思路。
...全文
190 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_45490482 2019-09-12
  • 打赏
  • 举报
回复
这是单例模式,如果有多个线程同时访问,并且为null的话,就会去抢锁,创建一个对象,对象一旦创建就不为空了,也就不会创建对象了。第二句代码已经确定了是一个static的类变量,只有一份。而且我加锁的对象是这个类,通过反射可以拿到。以上是我的看法
=PNZ=BeijingL 2019-09-12
  • 打赏
  • 举报
回复
[quote=引用 4 楼 weixin_43869905 的回复:]
1,private 写错了 私有化构造器那里,
2,懒汉模式,你既然提到了多线程高并发,那你加锁的地方也写错了

public static Singleton getInstance(){
if(s==null){
synchonized(Singleton.class){
if(s==null){ //这里还需要判断
s=new Singleton();
}

}
return s;
}


weixin_43869905 2019-09-11
  • 打赏
  • 举报
回复
引用 3 楼 weixin_43869905 的回复:
1,private 写错了 私有化构造器那里,
2,懒汉模式,你既然提到了多线程高并发,那你加锁的地方也写错了 这是我的看法 你觉得呢
new了3个对象,那第一个线程拿到的对象和后面2个线程拿到的 都不同的
weixin_43869905 2019-09-11
  • 打赏
  • 举报
回复
1,private 写错了 私有化构造器那里,
2,懒汉模式,你既然提到了多线程高并发,那你加锁的地方也写错了 这是我的看法 你觉得呢
  • 打赏
  • 举报
回复
聪头 2019-09-11
  • 打赏
  • 举报
回复

58,452

社区成员

发帖
与我相关
我的任务
社区描述
Java Eclipse
社区管理员
  • Eclipse
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧