单例模式
保证一个类仅有一个实例,并提供一个访问它的全局访问点。(摘抄)
解决的问题:保证一个类在内存中的对象唯一性。
比如:多程序读取一个配置文件时,建议配置文件封装成对象。会方便操作其中数据,又要保证多个程序读到的是同一个配置文件对象,就需要该配置文件对象在内存中是唯一的。
public class Singleton
{
private Singleton(){}
private static Singleton singleton;
public static Singleton getSingleton()
{
if (singleton == null)
{
singleton = new Singleton();
}
return singleton;
}
}
class Client
{
public static void main()
{
Singleton singleton1 = Singleton.getSingleton();
Singleton singleton2 = Singleton.getSingleton();
if (singleton1 == singleton2)
{
System.out.println("yes");
}
else
{
System.out.println("no");
}
}
}上面这种单例模式的类加载方式被称为懒汉式(延迟加载方式)
下面这种为饿汉式
public class Singleton
{
private Singleton(){}
private static Singleton singleton = new Singleton();
public static Singleton getSingleton()
{
return singleton;
}
}饿汉式在多线程时不会重复生成实例,因为静态初始化让它在程序加载的时候已经生成实例了,懒汉式如果要在多线程时也不出问题,那么需要双重锁定
public class Singleton
{
private Singleton(){}
private static Singleton singleton;
public static Singleton getSingleton()
{
if (singleton == null)
{
synchronized (Singleton.class)
{
if (singleton == null)
{
singleton = new Singleton();
}
}
}
return singleton;
}
}
这样懒汉式也可以在多线程时调用了。

本文介绍了单例模式的概念及其应用场景,详细解析了懒汉式和饿汉式的实现方式,并讨论了多线程环境下如何保证单例模式的有效性。
1万+

被折叠的 条评论
为什么被折叠?



