什么是单例
在整个应用程序中,某个类的实例只有一个.
class T{}
class Test{
main: 获取到T的实例
demo: 获取到T的实例
}
单例的应用
Spring中的bean默认都是单例
Servlet也是单例的
计算机的任务管理窗口
如何实现
单例
1.构造方法私有化
2.在成员变量位置声明引用
3.提供公有的static方法用于向外部提供实例
1.懒汉式单例 (lazySingleton) - 需要保证线程安全
public class Singleton {
//构造方法私有化
private Singleton(){}
//只声明,不初始化
private static Singleton singleton;
//提供公有的static的同步synchronized的方法向外提供实例
public synchronized static Singleton getInstance(){
if (singleton==null){
singleton = new Singleton();
}
return singleton;
}
}
懒加载机制:什么时候用,什么是去拿/创建对象
2.饿汉式单例 - HungrySingleton 本身就是线程安全的
public class Singleton{
private Singleton(){}
private static Singleton single=new Singleton();
public static Singleton getInstance(){
return single;