2

我只是想提出开发人员可能需要使用 Singleton 类的用例。他们来了:-

  1. 当我们需要保持资源之间的同步时。例如在记录的情况下,多个线程需要依次写入单个日志文件。这里单例有帮助,因为不同线程之间需要同步,以便它们按顺序写入单个文件。
  2. 当对象创建本身是昂贵的,这意味着它是耗时的操作。例如:- 在启动时创建休眠工厂。我并不是说在每种情况下都是这种情况,但是在某些情况下,当需要在应用程序之间共享相同的状态并且对象创建成本很高时,单例在这里会有所帮助。
  3. 在业务服务对象的情况下,单例会有所帮助,因为它迫使我们不要维护对象的状态,从而使代码更好地进行单元测试。

我的理解是否正确?

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

4

2 回答 2

5

每个 Java 应用程序都有一个 Runtime 类的实例,它允许应用程序与运行应用程序的环境进行交互。

感觉很直观,因为 Java 程序执行的环境是一个,不会改变的静态事物,因此Runtime被制成单例。

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

这是我对它的理解。

于 2013-10-23T17:21:11.727 回答
-2

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

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

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

您还问自己为什么要使用单例。单例意味着一个实例,但它实际上意味着每个类加载器一个实例。这可能是也可能不是您真正想要的解决方案。

于 2013-10-23T17:28:39.250 回答