单例模式不单例注意事项

来源:互联网 发布:linux中国 编辑:程序博客网 时间:2024/05/17 00:57

我们一般的单例模式是这样实现的:

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(),这样就保证了单例性质。

0 0
原创粉丝点击