单例设计模式
一、单例模式
1.单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。
注意:
1)、单例类只能有一个实例。
2)、单例类必须自己创建自己的唯一实例。
3)、单例类必须给所有其他对象提供这一实例。
2.单例的由来
问题:为了避免一个全局使用的类频繁地创建与销毁,节省系统资源;
目标:达到一个类仅有一个实例,并提供一个访问它的全局访问点;
实现: 判断系统是否已经有这个单例,如果有则返回,如果没有则创建,为了达到这个目的,必须构造函数是私有的。
应用:如数据库连接
二、双检锁/双重校验锁(DCL,即 double-checked locking)
双检锁/双重校验锁,是线程安全的
public class TestSingleton {
private static TestSingleton instance;
private TestSingleton() {
System.out.println("调用TestSingleton类的构造函数");
}
public static TestSingleton getInstance() {
if (instance == null) {
synchronized (TestSingleton.class) {
if (instance == null) {
instance = new TestSingleton();
}
}
}
return instance;
}
}
class MyThread implements Runnable {
public void run() {
System.out.println("hashCode值为" + TestSingleton.getInstance().hashCode());
}
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
Thread thread = new Thread(new MyThread());
thread.start();
}
}
}
运行结果:
通过运行结果,发现:多线程的情况下,只创建了一个TestSingleton类的对象。