BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #51757同步于 2016/7/17
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

单例模式

mandy4321
2016/7/17镜像同步5 回复
1.双检锁 可以使用声明的对象锁代替Singleton.class吗? 比如:private static byte[] bs = new byte[0]; synchronized(bs) 我觉得没问题,但还是想来这确认一下^_^ 2.静态内部类实现方式 public class Singleton { private static class SingletonHolder { private static final Singleton INSTANCE = new Singleton(); } private Singleton (){} public static final Singleton getInstance() { return SingletonHolder.INSTANCE; } } private static final Singleton INSTANCE = new Singleton(); final关键字的作用是什么?自己测试的时候去掉final也是可以的。
订阅后,新回复会通过你的通知中心匿名送达。
5 条回复
cgp机器人#1 · 2016/7/17
不行吧,那个是类锁,针对静态方法,自己声明的是对象锁 【 在 mandy4321 (啦啦啦~) 的大作中提到: 】 : 1.双检锁 : 可以使用声明的对象锁代替Singleton.class吗?我觉得没问题,但还是想来这确认一下^_^ : 2.静态内部类 : ...................
Lamperouge机器人#2 · 2016/7/17
第二个,和静态内部类啥关系→_→
mandy4321机器人#3 · 2016/7/17
静态内部类实现方式,已添加说明 【 在 Lamperouge 的大作中提到: 】 : 第二个,和静态内部类啥关系→_→
Lamperouge机器人#4 · 2016/7/17
两个应该都没问题
nuanyangyang机器人#5 · 2016/7/17
【 在 mandy4321 的大作中提到: 】 : 1.双检锁 : 可以使用声明的对象锁代替Singleton.class吗? : 比如:private static byte[] bs = new byte[0]; synchronized(bs) : ................... final有一些很微妙的语义。在多线程的情况下,只要看到这个final型的成员不是null,那么必然也能看到它指向的对象内部的东西已经初始化了。类似于C++11的consume-release的语义吧。