在实例变量上实际使用延迟初始化

时间:2013-04-24 17:25:36

标签: java

我想了解一些实际情况,我们需要使用实例变量的延迟初始化。我已经将静态变量使用Singleton模式用于所有线程都可以使用相同文件处理程序但在实际可以使用它的场景中不确定的情况。

此致 Ramakant

3 个答案:

答案 0 :(得分:1)

每当单例非常耗费资源(内存,处理能力,带宽,网络端口等)时,您只想按需创建它,因为在永远不需要单例的情况下,初始化会急切地浪费资源。

另一个原因:如果在实际需要单例时只存在初始化单例的资源,它可以使您的系统更加健壮。例如。假设单例是一个打印假脱机程序。如果系统中当前没有打印机,则不值得分配尝试连接到不存在的打印机的假脱机程序。由于用户不应该在系统中没有打印机时请求打印,因此延迟假脱机程序提供了完全正确的行为而没有明确的逻辑。用户从不请求pringing,因此假脱机程序永远不会初始化,并且永远不会出现连接尝试失败。

懒惰初始化有意义的潜在资源密集型单例的其他示例:记录器,唯一的SOA服务,独特的通用网络服务,缓存管理器,负载平衡器,伪随机数流生成器,资源管理器。

答案 1 :(得分:0)

例如,您有一个与图像相关联的实体User,因此当您阅读用户时,您并不总是需要图像,因此请在实际需要时懒洋洋地加载该图像

答案 2 :(得分:0)

也许是模板库的模板抽象。模板初始化为String s,但仅在实际请求/运行模板时编译为快速的内部表示。