为什么java.lang.Runtime是单例的?单身要求?

时间:2013-10-23 16:58:27

标签: java design-patterns singleton

我只是试图提出开发人员可能需要使用Singleton类的用例。他们在这里: -

  1. 当我们需要维护资源之间的同步时。对于 例如,在记录的情况下,多个线程需要写入单个 按顺序记录日志文件。在这里,singleton有助于同步 在不同的线程中需要它们以便在单个文件中写入 按顺序。
  2. 当对象创建本身代价高昂时,意味着时间 消耗操作。例如: - 在hibernate工厂创建 启动。我并不是说在任何情况下都是如此 是的,在某些情况下,当需要相同的状态时,单身人士可以帮到这里 在应用程序和对象创建之间共享代价很高。
  3. 对于业务服务对象,单例帮助 迫使我们不要维持反过来造成的物体状态 代码更好单元可测试。
  4. 我的理解是否正确?

    我在jdk中寻找单身人士的例子,遇到了Runtime课,并想到了为什么这个单身人士?根据我的理解,理由应该是第一个。例如,我们需要同步,以便两个线程不会在同一时刻运行GC。我的逻辑是否正确?

2 个答案:

答案 0 :(得分:5)

  

每个Java应用程序都有一个Runtime类的实例   允许应用程序与其中的环境接口   应用程序正在运行

由于Java程序正在执行的环境是一个不会改变的静态事物,因此感觉很直观,Runtime是单例。

即使您生成越来越多的线程,处理器数量,总RAM等也不会改变。因此,使Runtime单例实例通过避免必须创建包含与1000个其他线程相同的信息的对象来优化程序的执行。

这是我对它的理解。

答案 1 :(得分:-2)

单身人士是邪恶的。它们实际上是伪装的全局变量。它们对单元测试特别不好,因为一旦单例由类加载器加载,它的行为就被修复了,所以你不能模拟它。您的代码将被修复以永久地调用该依赖项。

更好的方法是使用依赖注入将该依赖项精确地注入到需要的位置,或者通过代码将依赖项传递到需要的位置。

阅读:http://c2.com/cgi/wiki?SingletonsAreEvil

你也问自己为什么要使用单身人士。单例表示一个实例,但它实际上表示每个类加载器一个实例。这可能是你真正想要的解决方案,也可能不是。