class LazySingleton{
private static LazySingleton singleton;
private LazySingleton(){
}
public static LazySingleton getInstance(){
if(singleton==null){
singleton=new LazySingleton();
}
return singleton;
}
}
2、恶汉写法,缺点是没有达到lazy loading的效果
class HungrySingleton{
private static HungrySingleton singleton=new HungrySingleton();
private HungrySingleton(){}
public static HungrySingleton getInstance(){
return singleton;
}
}
3、静态内部类,优点:加载时不会初始化静态变量INSTANCE,因为没有主动使用,达到Lazy loading
class InternalSingleton{
private static class SingletonHolder{
private final staticInternalSingleton INSTANCE=new InternalSingleton();
}
private InternalSingleton(){}
public static InternalSingleton getInstance(){
return SingletonHolder.INSTANCE;
}
}
4、枚举,优点:不仅能避免多线程同步问题 , 而且还能防止反序列化重新创建新的对象
enum EnumSingleton{
INSTANCE;
public void doSomeThing(){
}
}
5、双重校验锁,在当前的内存模型中无效
class LockSingleton{
private volatile static LockSingleton singleton;
private LockSingleton(){}
//详见:
public static LockSingleton getInstance(){
if(singleton==null){
synchronized(LockSingleton.class){
if(singleton==null){
singleton=new LockSingleton();
}
}
}
return singleton;
}
}
参考自:
关于java代码实现单例模式和java代码实现单例模式的方法的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。
- redis实现延时消息队列 redis消息时间过长
- 使用redis实现分布式锁及其优化 redis分布式性能
- redis事务实现原理 在事务中使用redis
- 如何获取云服务器的源代码? 云服务器源代码怎么弄
- redis map底层实现 redis多个map命令
- mongodb表设计 mongodb实现动态表单
- 如何设置云服务器的源代码? 云服务器源代码怎么设置
- java查询数组中是否包含某一个值 javamongodb数组查询
- 如何修改云服务器的源代码? 云服务器源码怎么修改
- redis实现排行榜思路 redis全站排行榜
