简介
单例模式可以用在建立目录、数据库连接等需要单线程操作的场合,用于实现对系统资源的控制
表现形式
1 .饿汉式单例模式
public class Singleton {
//类在加载时就生成一个静态实例且私有
private static Singleton myInstance = new Singleton();
//构造方法私有,保证外界无法直接实例化
private Singleton(){
}
//获得实例对象的方法设为公有
public static Singleton getInstance(){
return myInstance;
}
}
2 .懒汉式单例模式
public class Singleton {
//类在加载时只声明不赋值
private static Singleton myInstance = null;
//构造方法私有,保证外界无法直接实例化
private Singleton(){
}
//对静态方法 getInstance()进行同步,以确保多线程环境下只创建一个实例,例如,如果 getInstance()方法未被同步,并且线程A和线程B同时调用此方法,则执行if (myInstance == null)语句时都 为真,那么线程A和线程B都会创建一个对象,在内存中就会出现两个对象,这样就违反了单例模式;但使用 synchronized关键字进行同步后,则不会出现此种情况。
synchronized public static Singleton getInstance(){
if(myInstance == null){
myInstance = new Singleton();
}
return myInstance;
}
}