单例模式。
单例模式有两种,饿汉式和懒汉式。前者不会出现同步问题,后者不仅有同步问题,而且即使使用同步函数,也会带来效率的问题。所以需要优化。
下面是代码详解:
【据说面试常考懒汉式,而实际应用中都是饿汉式】
//【饿汉式单例模式】:
//线程安全,对于贡献数据的操作带码不会产生不同步问题(只有一行);
class Single{
private static Single s = new Single();
private Single(){
}
//通过此方法获取对象,有点就是可控!。你可以根据条件是否返回该实例
public static Single getInstance(){
return s;
}
}
//【懒汉式】
//线程不安全的,因为操作贡献数据的代码存在多行,会产生不同步!
//为了解决单例模式的线程不安全问题,因此需要同步代码【当然你可以直接用安全的恶汉式】
//以下就是,既安全又不会因为cpu的调度导致效率低下的懒汉式单例模式
class Single {
private static Single s = null;
private Single(){}
// Thread2
private static Single getInstanceSingle(){
if(s==null){
synchronized(Single.class) {
//Thread1
if(s == null) {
return s = new Single();
}
}
//Thread0
}
return s;
}