单例模式:保证只有单个对象被创建,不需要实例化该类的对象
(特点 )保证一个类只有一个实例,并存在公有的访问方法
饿汉式(线程安全)
package test.th;
//饿汉式
public class EHANSHI {
//私有变量
private static EHANSHI ehs = new EHANSHI();
//私有构造
private EHANSHI() {
};
//公有静态方法
public static EHANSHI getEHANSHI() {
return ehs;
}
}
懒汉式(线程不安全)
package test.th;
//懒汉式
public class LANHANSHI {
//私有变量
private static LANHANSHI lhs;
//私有构造
private LANHANSHI() {
};
//公有静态方法
public static LANHANSHI getLANHANSHI() {
if (lhs == null) {
lhs = new LANHANSHI();
}
return lhs;
}
}
(双锁机制-可在实例域需要延迟初始化时使用)
package test.th;
//懒汉式双锁机制
public class LHDOUBLE {
//私有变量中 volatile修饰
/**
* volatile:
* 当子线程语句调用 volatile修饰的变量时
* 都会从主线程进行拷贝,保证变量的实时一致性
* 当子线程语句操作volatile修饰的变量时
* 都会在操作完成后同步到主线程,已保证变量的更新
*/
private volatile static LHDOUBLE lhd;
//私有构造
private LHDOUBLE() {};
//公有静态方法
public static LHDOUBLE getLHDOUBLE() {
if (lhd == null) {
synchronized (LHDOUBLE.class) {
if (lhd == null) {
lhd = new LHDOUBLE();
}
}
}
return lhd;
}
}
静态内部类机制(可对静态域使用延时初始化)
package test.th;
//静态内部类的单例
public class JT {
//私有静态内部类
private static class JTClass{
private static final JT jt = new JT();
}
//私有构造
private JT() {}
//公有静态final方法
public static final JT getJT() {
return JTClass.jt;
}
}