单例实现的一种方式:私有构造器,公有静态工厂方法publicclassSingleton2{privatestaticfinalSingleton2INSTANCE=newSingleton2();//私有静态final域/**私有构造器*/privateSingleton2(){}/**公有静态工厂方法*/publicstaticSingleton2getInstance(){returnINSTANCE;}}为了使利用这种方法实现的Singleton类变成可序列化的,仅仅在申明中加上“implementsSerializable”是不够的。为了维护并保证Singleton,必须声明所有的实例域都是transient,并提供一个readResolve()方法,否则,每次反序列化一个序列化的实例时都会创建一个新的实例。这段话是effectivejava中的描述,我不理解的是为什么仅仅加上implementsSerializable不行呢,反序列化一个序列化的实例时会创建一个新的实例?--补充问题:关于这种单例模式有一种评论如下:这种方式基于classloder机制避免了多线程的同步问题,不过,instance在类装载时就实例化,虽然导致类装载的原因有很多种,在单例模式中大多数都是调用getInstance方法,但是也不能确定有其他的方式(或者其他的静态方法)导致类装载,这时候初始化instance显然没有达到lazyloading的效果。这里的其他方式还可以是什么?
郎朗坤
慕盖茨4494581
随时随地看视频慕课网APP
相关分类