一.单例模式
确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,
核心要素就是将构造方法私有化
主要应用就是确保一个类只有一个实例存在,如序列号生成器和web页面计数器等,
还有就是某个对象需要消耗较多资源,如访问IO或数据库资源时使用单例模式减少资源消耗
单例模式又分为饿汉式和懒汉式
二.饿汉式
在类加载时就进行实例化
由于该类的实例在创建类时就已构造好了,故所有方法获取的对象都是同一个
/**
* 饿汉式
*/
class Singleton1{
private static Singleton1 singleton = new Singleton1();//实例化
private Singleton1(){}
public static Singleton1 getInstance(){
return singleton;
}
}
三.懒汉式
在第一次获取该实例的时候才构造该对象
但是如果第一次调用过后就不再创建新对象了,故获取的对象也是同一个.
但懒汉式线程不安全,举个例子,如果a,b线程同时执行方法会构造两个实例,所以得加锁,关于线程安全问题可以看我这篇文章多线程的安全问题一:同步方法与同步代码块
/**
* 懒汉式
*/
class Singleton2{
private static Singleton2 singleton = null;
private Singleton2(){}
public synchronized static Singleton2 getInstance(){
if(singleton == null)
singleton = new Singleton2();
return singleton;
}
}
四.测试

本文深入探讨了Java中的单例模式,包括饿汉式和懒汉式的实现方式。饿汉式在类加载时即完成实例化,确保多线程安全,而懒汉式则在首次获取实例时才构造对象,可能存在线程不安全问题,但可以通过同步解决。单例模式常用于控制序列号生成器、计数器以及减少资源消耗的场景。
587

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



