我们一般的单例模式是这样实现的:
publicclassSingletonClass{
privatestaticSingletonClassinstance=null;
publicstaticSingletonClassgetInstance(){
if(instance==null){
instance=newSingletonClass();
}
returninstance;
}
privateSingletonClass(){
}
}
在多线程的情况下,如果两个线程同时执行到if(instance==null)的里面,则该单例模式就不再单例了!
解决方案:
publicclassSingletonClass{
privatestaticSingletonClassinstance=null;
publicstaticSingletonClassgetInstance(){
if(instance==null){
synchronized(SingletonClass.class){
if(instance==null){
instance=newSingletonClass();
}
}
returninstance;
}
privateSingletonClass(){
}
}
采用synchronized,线程锁的方式进行控制,保证只能有一个线程执行new SingletonClass(),这样就保证了单例性质。