美文网首页
单例模式与多线程

单例模式与多线程

作者: 小人物灌篮 | 来源:发表于2017-03-10 19:16 被阅读44次

这里直接给出几种懒汉模式的单例多线程安全的写法。
这种写法就是普通的单例模式,但是是非线程安全的,至于原因,根据前面的多线程基础应该可以自己总结出来。

public class MyObject1 {
    private static MyObject1 myobject;//“懒汉模式的”
    private MyObject1(){}
    public static MyObject1 getInstance(){
        //延迟加载
        if(myobject != null){
        }else{
            myobject = new MyObject1();
        }
        return myobject;
    }
}

以下的写法是可以实现多线程安全的懒汉模式的单例。

/**
 *线程安全的单利模式
 *此种方式实现的单利模式效率不高,但是线程安全
 */
public class MyObject2 {
    private MyObject2 myobject;
    private MyObject2(){}
    synchronized public MyObject2 getInstance(){
        if(myobject != null){}else{
            myobject = new MyObject2();
        }
            return myobject;
    }
}

方法二:

/**
 *使用DCL双检查锁的机制,在保证线程安全的前提下,有效提高了效率
 */
public class MyObject3 {
    private MyObject3 myobject;
    private MyObject3(){}
    public MyObject3 getInstance(){
        if(myobject == null){
            synchronized(MyObject3.class){
                if(myobject==null){
                    myobject = new MyObject3();
                }
            }
        }
        return myobject;
    }
}

方法三:

/**
 *使用静态内置类实现单例模式
 */
public class MyObject4 {
    private static class MyObjectHandler{
        private static MyObject4 myObject = new MyObject4();
    }
    private MyObject4(){}
    public static MyObject4 getInstance(){
        return MyObjectHandler.myObject;
    }
}

方法四:

/**
 *本例通过static代码块实现单利模式,同样的实现了线程安全
 */
public class MyObject5 {
    private static MyObject5  myobject= null;
    private MyObject5(){}
    static{
        myobject=new MyObject5();
    }
    public static MyObject5 getInstance(){
        return myobject;
    }
}

方法五:

import java.sql.Connection;

/**
 * 本例通过enum枚举数据类型实现单利模式
 * @author 24540
 *
 */
public class MyObject6 {
    
    public enum MyEnumSingleton{
        connectionFactory;
        private Connection  connection;
        private MyEnumSingleton(){
            System.out.println("创建myObject、对象");
            String url = "jdbc:sqlserver...";
            //在这里进行一系列的操作
        }
        public Connection getConnection(){
            return connection;
        }
    }
    public static Connection getConnection(){
        return MyEnumSingleton.connectionFactory.connection;
    }
}

相关文章

  • Java多线程--并行模式与算法

    Java多线程--并行模式与算法 单例模式 虽然单例模式和并行没有直接关系,但是我们经常会在多线程中使用到单例。单...

  • 单例模式Java篇

    单例设计模式- 饿汉式 单例设计模式 - 懒汉式 单例设计模式 - 懒汉式 - 多线程并发 单例设计模式 - 懒汉...

  • 单例模式

    单例模式介绍 把单例模式放到多线程基础这块,是因为单例和多线程有一点的关系。何为单例模式? 在它的核心结构中只包含...

  • Unity3d游戏开发之-单例设计模式-多线程一

    单例模式3:多线程一

  • 单例模式

    单例模式 单例模式:用来保证一个对象只能被创建一次。 普通版 代码实现如下 同步锁单例 单例模式如果再多线程中使用...

  • 多线程(下)&GUI

    day25(多线程(下)&GUI) 1_多线程(单例设计模式)(掌握) 单例设计模式:保证类在内存中只有一个对象。...

  • 设计模式——单例模式的破坏

    概述: 之前学习了单例模式的几种实现,解决了多线程情况下,单例的线程安全问题,保证了单例的实现。但是单例模式在下面...

  • iOS 多线程NSThread,GCD,NSOperation

    单例模式例子: https://github.com/XiaoRuiZuo/Singleton 多线程:多线程是为...

  • day25-多线程/Timer/单例模式/工厂模式/GUI

    25.01_单例设计模式(掌握) 单例设计模式:保证类在内存中只有一个对象。 25.02_多线程(Runtime类...

  • 25.01_多线程(单例设计模式)

    ###25.01_多线程(单例设计模式)(掌握) * 单例设计模式:保证类在内存中只有一个对象。 * 如何保证类在...

网友评论

      本文标题:单例模式与多线程

      本文链接:https://www.haomeiwen.com/subject/cfeogttx.html