单例模式
概念,在核心结构中包含一个单例的特殊类,或者是说一个类只能被实例化一次
特点 1 只能有一个实例 。 2 必须自己创建自己的实例. 3单例类必须给其他对象提供这一实例
方式 1 饿汉 类加载时就完成了初始化 除非系统重启这个对象是不会改变的,线程安全
2 懒汉 类加载时不会初始化 在使用的时候才进行初始化
3 静态内部类的方式实现
饿汉式
饿汉式主要有两种种实现方式
第一种就是静态变量式初始化 静态方法获取
private static Singleton singleton = new Singleton();
public static Singleton getInstance(){
return singleton;
}
第二种是静态代码块的方式来实现
private static Singleton singleton;
static {
//静态代码块的方式实现
singleton = new Singleton();
}
public static Singleton getInstance(){
return singleton;
}
以上两种实现方式均为饿汉式,在类加载式就完成了初始化工作,本身就是线程安全的
懒汉式
懒汉式是在用到时候才会初始化,在多线程中并不是线程安全,可能会被创建多个实例,这与单例的宗旨目的相违背,所以为了达到线程安全的目的采用synchronized同步锁的方式来达到线程安全的目的
private static Singleton singleton = null;
public static Singleton getInstacn(){
if(singleton==null){
synchronized (Singleton.class){
if(singleton==null){ //双重判空是为了 判断是否有线程已经执行过
singleton = new Singleton();
}
}
}
return singleton;
}
静态内部类的式
//静态内部类 在主动使用的时候才会加载
private static class InnerSingleton{
static Singleton singleton = new Singleton();
}
public static Singleton getInstance(){
return InnerSingleton.singleton;
}
以上就是单例的主要实现方式,具体是用哪种根据业务情况自己判断。
网友评论