单例模式定义:确保一个类只有一个实例。并提供一个全局访问点。
在实际工作和面试中,单例模式可能是我们遇到频率比较大的设计模式之一。
下面给出两种单例模式的实现方式:
1、急切实例化的方式:
public class Singleton
{
private static Singleton singleton = new Singleton();
private Singleton()
{
}
public static Singleton getInstance()
{
return singleton;
}
}
这种方式比较简单,也是比较常用的一种方式。定义变量时就实例化对象了。这样避免了多线程带来的同步问题。
2、双重检查加锁 的方式:
public class Singleton
{
private volatile static Singleton singleton ;
private Singleton()
{
}
public static Singleton getInstance()
{
if(singleton == null)
{
synchronized (Singleton.class)
{
if(singleton == null)
{
singleton = new Singleton();
}
}
}
return singleton;
}
}
使用volatile 关键字保证了多线程情况下singleton 引用的可见性,使用双重检查锁定,只有在singleton 为空时才进行加锁操作,这样提高了程序的效率。双重检查锁定也是多线程程序中比较常见的一种加锁方式,但是这种写法不能用于jdk1.2以前的版本,因为jdk1.2版本 以前的jvm的垃圾回收机制有bug,singleton 会被当成循环引用 被回收(我猜的)。
两种写法都是非常常用的写法,希望能给面试和工作的同学一点帮助……
分享到:
相关推荐
这个讲的是单例模式的多种不同实现方式,希望对单例感兴趣的同学看看
使用"懒汉模式"与"饿汉模式"实现c++的单例模式,并且确保了单例模式的第一次实例化的线程安全,以及程序结束时,单例对象的资源收回,以防内存资源的泄漏
2020-02-10 王争设计模式之美进入课程讲述:冯永吉时长 10:21大小 8.31M上两节课中,我们针对单例模式,讲解了单例的应用场景、几种常见的代码实现
两种单例实现方式
单例模式主要有懒汉式和饿汉式两种实现,饿汉式不会有线程安全的问题,但是提前构造对象占用了一定的资源,如果对内存要求较低的场景可以使用饿汉式实现;懒汉式应使用DCL机制来避免多线程竞争资源的问题,并且懒汉...
今天在复习设计模式中的-创建型模式,发现JS实现单例模式的方案有很多种,稍加总结了一下,列出了如下的6种方式与大家分享 大体上将内容分为了ES5(Function)与ES6(Class)实现两种部分 单例模式就是在系统中...
设计模式之单利模式,两种单例模式的实现方法:恶汉式和懒汉式;
ios单例模式的详细解释、两种方式实现单例模式,重写需要实现的方法
3、两种比较器以及sort()方法的重载: 结论:Icomparable接口在需要比较的类中实现;Icomparer接口在任何类中实现,使用时只需将这个类的对象作为参数传给Sort()就行。 4、接口的使用 结论:接口作为参数,即接口的...
Qt两种方法实现多线程的开启,及子线程的安全结束线程,及QMutex加锁,Qt单例化实现
单例模式的实现分为两种:饿汉式和懒汉式。前者是在静态构造函数执行时就立即实例化,后者是在程序执行过程中第一次需要时再实例化。两者有各自适用的场景,实现方式也都很简单,唯一在设计时要考虑的一个问题就是:...
本工程实现了一种利用静态工厂和单例模式两种模式思路设计的线程相关的单例模式。
这是关于单例模式的两种经典版本分析以及代码实现,以及附带了C++中双重检查技术来实现同步访问问题,单例模式在校园招聘的时候也是面试的经典题
主要介绍了Java多线程中的单例模式两种实现方式的相关资料,需要的朋友可以参考下
主要介绍了Python单例模式的相关资料,这里提供了两种实现方法,及注意事项,需要的朋友可以参考下
通常单例模式在Java语言中,有两种构建方式: 懒汉式—线程不安全:最基础的实现方式,线程上下文单例,不需要共享给所有线程,也不需要加synchronize之类的锁,以提高性能。 懒汉式—线程安全:加上synchronize之类...
下面让我们主要看一下前两种方式。 第一种方式,用new方法初始化其实是第二种方式的总和,当调用new方法时,其实是先调用了alloc方法进行isa(is a pointer)操作,创建指针,指向内存中的数据结构,紧接着调用了init...
前言 好久没写东西了,但是想着无论什么事还是要坚持自己初心要坚持的东西。写东西不能断! 对于常用的23种设计模式,这里笔者会根据自己学习和出现频率、...而单例模式也有很多的应用,比如很多驱动例如摄像头、打印
【设计模式】(四)–创建型模式–单例模式单例模式的定义饿汉式单例模式懒汉式...Java语言中实现单例通常有两种变现形式。 饿汉式单例模式:类加载时,就进行对象实例化 懒汉式单例模式:第一次引用类才进行对象实例化
单例模式有两个特点: 在系统的整个生命周期内,单例对象最多只能有一个 单例对象必须由单例类自行创建,并对外提供访问入口 一个类可以创建多个对象,这是面向对象的语言特性,想要实现单例模式,就要屏蔽这个特性...