单例模式
饿汉式
饿汉式的特点:线程安全,调用效率高,但是不能延迟加载
实现源码:
public class SingleCase {
private static SingleCase dl = new SingleCase ();
private SingleCase (){};
public static SingleCase getdl(){
return dl;
}
}
懒汉式
懒汉式的特点:线程安全,调用效率不高,但是能延迟加载
实现源码:
public class Lazy{
private static Lazy s;
private Lazy(){};
//(加入同步块,防止并发量高的时候创建多个对象)
public static synchronized Lazy gets (){
if(s==null){
s = new Lazy();
}
return s;
}
}
双重检测锁式
双重检测锁式的特点:线程安全,调用效率高,但是能延迟加载
具体实现原理:
把同步块放到了if下面,只用第一次同步检测,其余的就不用了同步了
静态内部类式
静态内部类式的特点:线程安全,调用效率高。但是,可以延迟加载(最理想的单例模式)
实现源码:
public class State{
private static class getInstance{
private static final State s= new State();
}
private State(){
}
public static State getjts(){
return getInstance.s;
}
}
枚举单例
枚举单例: 线程安全,调用效率高,不能延迟加载
具体:天然的单例模式:优点,简单实用,缺点:没得懒加载,即延迟加载
使用方式:直接名字点属性即可调用,并且可以天然的防止反射和反序列化漏洞