打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
单例模式

。。。

/**

饿汉式

类加载到内存,就实例化一个单例。jvm保证线程安全

简单实用,推荐实用

唯一缺点:不管用到与否,类加载时就完成实例化。

*/

public class Single01{

    private static final Single01 INSTANCE = new Single01();

    private Single01(){}

    public static Single01 getInstance(){return INSTANCE;}

}

/**

和01没区别,只是用静态语句块,写法不一样而已。

*/

public class Single02{

    private static final Single02 INSTANCE;

    static{INSTANCE = new Single02();}

    private Single02(){}

    public static Single02 getInstance(){return INSTANCE;}

}


/**

lazy loading

懒汉式

按需初始化,但线程不安全

*/

public class Single03{

    private static Single03 INSTANCE;

    private Single03(){}

    public static Single03 getInstance(){

    if(INSTANCE == null){INSTANCE = new Single03();}

    return INSTANCE;}

}


测试代码(多条线程)

public class Single03{

    private static Single03 INSTANCE;

    private Single03(){}

    public static Single03 getInstance(){

    if(INSTANCE == null){

//因为CPU太快,第2条线程还没进来,第1条线程已经执行完了

Thread.sleep(1);//睡1毫秒,为了让其他线程进来。

INSTANCE = new Single03();}

    return INSTANCE;}

public static void main(String[] args){for(int i=0;i<100;i++){

new Thread(()->{System.out.println(Single03.getInstance().hashCode());}).start();

}}

}



/**

在03基础上直接加锁,但效率低了

*/

public class Single04{

    private static Single04 INSTANCE;

    private Single04(){}

    public static synchronized Single04 getInstance(){

    if(INSTANCE == null){INSTANCE = new Single04();}

    return INSTANCE;}

}

测试代码(多条线程)

public class Single04{

    private static Single04 INSTANCE;

    private Single04(){}

    public static synchronized Single04 getInstance(){

    if(INSTANCE == null){

//因为CPU太快,第2条线程还没进来,第1条线程已经执行完了

Thread.sleep(1);//睡1毫秒,为了让其他线程进来。

INSTANCE = new Single04();}

    return INSTANCE;}

public static void main(String[] args){for(int i=0;i<100;i++){

new Thread(()->{System.out.println(Single04.getInstance().hashCode());}).start();

}}

}




。。。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
JAVA实现单例模式的四种方法和一些特点
Hi,我们再来聊一聊 Java 的单例
C# 设计模式-单例模式
Java设计模式之单例模式
Java单例设计模式的实现
设计模式笔记(一):Singleton 设计模式
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服