博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[转]Number one:单例模式5种JAVA实现及其比较
阅读量:5143 次
发布时间:2019-06-13

本文共 1659 字,大约阅读时间需要 5 分钟。

错误解法一:当处于多线程环境时,会出现竞争。

public class Singleton1     {    private Singleton1()    {    }    int a =5;    private static Singleton1 singleton1 = null;    public static Singleton1 getSingleton1(){        if(singleton1 == null){            singleton1 = new Singleton1();        }        return singleton1;    }}

 

错误解法二:虽然加了锁,解决了多线程下的竞争。但是在创建后的每次访问都加锁,影响效率。

public class Singleton2 {    private Singleton2()    {    }    int a =5;    private static Singleton2 singleton2 = null;    public static Singleton2 getSingleton2(){        synchronized(Singleton2.class)        {            if(singleton2 == null){                singleton2 = new Singleton2();            }        }        return singleton2;    }}

 

可行的解法三:在锁前面再加一个if判断将是一种可行的解法。

public class Singleton3 {    private Singleton3()    {    }    int a =5;    private static Singleton3 Singleton3 = null;    public Singleton3 getSingleton3(){        if(Singleton3 == null){            synchronized(Singleton3.class)            {                if(Singleton3 == null){                    Singleton3 = new Singleton3();                }            }        }        return Singleton3;    }}

 

 推荐的解法4:利用静态构造函数

public class Singleton4 {    private Singleton4() {    }    private static Singleton4 Singleton4 = new Singleton4();    public Singleton4 getSingleton4() {        return Singleton4;    }}

 推荐的解法5:实现按需创建实例,涉及语言特性

public class Singleton5 {    Singleton5() {    }    public Singleton5 getSingleton5() {        return Nested.instance;    }        static class Nested{        Nested(){        }        static Singleton5 instance = new Singleton5();    }}

 

 

转载于:https://www.cnblogs.com/study-development/p/3521623.html

你可能感兴趣的文章
JavaScript面向对象初探——封装和继承
查看>>
L2-001 紧急救援 (dijkstra+dfs回溯路径)
查看>>
javascript 无限分类
查看>>
spring IOC装配Bean(注解方式)
查看>>
[面试算法题]有序列表删除节点-leetcode学习之旅(4)
查看>>
SpringBoot系列五:SpringBoot错误处理(数据验证、处理错误页、全局异常)
查看>>
kubernetes_book
查看>>
OpenFire 的安装和配置
查看>>
ZJOI2018游记Round1
查看>>
侧边栏广告和回到顶部
查看>>
https://blog.csdn.net/u012106306/article/details/80760744
查看>>
ios应用版本号设置规则
查看>>
海上孤独的帆
查看>>
error: more than one device and emulator 问题解决
查看>>
Java基础:容器
查看>>
YUV摘要格式
查看>>
【方法2】删除Map中Value反复的记录,而且仅仅保留Key最小的那条记录
查看>>
C# CheckedListBox控件的使用方法
查看>>
【HDOJ】2007平方和与立方和
查看>>
SharePoint自定义程序页面部署 不用重启IIS
查看>>