- 静态内部类(static nested class) 优先考虑
- publicclassLazySingleton{
- privateLazySingleton(){}
- privatestaticclassNested{
- privatestaticfinalLazySingletonsingle=newLazySingleton();
- }
- publicstaticLazySingletongetInstance(){
- returnNested.single;
- }
- }
双重检查锁定(DCL)
- publicclassLazySingleton{
- privateLazySingleton(){}
- privatestaticvolatileLazySingletonsingle=null;
- publicstaticLazySingletongetInstance(){
- if(single==null){
- synchronized(LazySingleton.class){
- if(single==null){
- single=newLazySingleton();//①非原子操作
- }
- }
- }
- returnsingle;
- }
- }