单例模式
简单的说,把类的构造函数私有化,就是单例模式。
public void Singleton{
private static final Singleton singleton = new Singleton();
private Singleton(){
}
public Singleton getInstance(){
return singleton;
}
}
这是一种被称为饿汉式的单例模式,这种方式并不需要考虑多线程的问题。
还有一种创建单例模式的写法,就要小心多线程的问题了。
public void Singleton{
private static final Singleton singleton = null;
private Singleton(){
}
public Singleton getInstance(){
if(singleton == null)
singleton = new Singleton();
return singleton;
}
}
这种写法被称为懒汉式(不要问我为什么叫懒汉式、饿汉式!)
这种写法要注意多线程的问题了,如果线程A在执行完singleton == null的判断时,还未来及创建singleton,此时CPU控制权被线程B获取,线程B成功创建singleton后,释放了控制权,线程A重新获得控制权,那么此时线程A会继续执行并创建singleton。此时内存中会存在两个singleton的实例。
那么单例模式有啥用处呢?
如果在系统中,需要频繁的创建和销毁对象,会对系统资源造成极大的浪费。那么此时,就可以使用单例模式,创建一个实例对象,使它长期驻存在内存中。