返回信息流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也是可以的。
这是一条镜像帖。来源:北邮人论坛 / java / #51757同步于 2016/7/17
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
单例模式
mandy4321
2016/7/17镜像同步5 回复
订阅后,新回复会通过你的通知中心匿名送达。
5 条回复
不行吧,那个是类锁,针对静态方法,自己声明的是对象锁
【 在 mandy4321 (啦啦啦~) 的大作中提到: 】
: 1.双检锁
: 可以使用声明的对象锁代替Singleton.class吗?我觉得没问题,但还是想来这确认一下^_^
: 2.静态内部类
: ...................
【 在 mandy4321 的大作中提到: 】
: 1.双检锁
: 可以使用声明的对象锁代替Singleton.class吗?
: 比如:private static byte[] bs = new byte[0]; synchronized(bs)
: ...................
final有一些很微妙的语义。在多线程的情况下,只要看到这个final型的成员不是null,那么必然也能看到它指向的对象内部的东西已经初始化了。类似于C++11的consume-release的语义吧。