线程安全的单例模式有几种?有何特点?

2020-05-24 20:33:36 java常见问答 7982

大家时候了解线程安全单例模式有哪几种呢?通常我们都知道单例模式分为饿汉模式和懒汉模式?今天小编给大家来讲解下,接下来让我们一起来了解下吧。

单例模式是常见的设计模式之一:

单例模式有如下三个优点:

1.控制资源的使用,通过线程同步来控制资源的并发访问

2.控制实例的产生个数,来达到节约资源的目的

3.作为通信媒介使用,在不建立连接的情况下,让两个不先关的进程和线程之间实现通信

单例模式分类:

饿汉模式(在类加载时便会创建对象);

懒汉模式(在外部第一次请求实例时才会创建实例);

登记式模式

前两者都是常用的。

单例模式特点:

1.单例类只有一个实例

2.单例类必须自己创建自己唯一的实例

3.单例类必须自己给其他类提供这一实例

1.懒汉模式:类加载时不会初始化,当外部第一次请求实例时才会创建实例;而且第一次创建后不在创建该实例;

特点是:运行时获取对象的速度比较慢,但加载的时候比较快,它在整个生命的应用周期只占用一部分资源

//单例模式-懒汉式单例 public class LazySingleton { 
//私有静态对象,加载时候不做初始化 private static LazySingleton jjy=null; 
// 私有构造方法,避免外部创建实例 private LazySingleton(){}
/** * 静态工厂方法,返回此类的唯一实例. * 当发现实例没有初始化的时候,才初始化. * @return LazySingleton */
synchronized public static LazySingleton getJjy()
{
    if (jjy == null)
    {
        jjy = new LazySingleton();
    }
    return jjy;
}
}

2.饿汉模式:类加载时就会初始化,创建实例;

特点是:运行时获取对象速度比较快,但加载时速度比较慢,会一直占用资源

//单例模式-饿汉式单例
public class EagerSingleton
{
    //私有静态对象,加载时候不做初始化
    private static EagerSingleton jjy = new EagerSingleton();
    // 私有构造方法,避免外部创建实例
    private EagerSingleton()
    {}
    /**
     * 静态工厂方法,返回此类的唯一实例.
     *
     *
     */
    synchronized public static EagerSingleton getJjy()
    {
        return jjy;
    }
}

以上就是今天所讲的内容,更多java常见问答知识想要了解,请继续关注本网站。

推荐文章:

java运算符优先级排序正确的是哪些?

Java一维数组如何使用?Java一维数组定义方法详解

java返回数组如何返回?Java入门教程