代码之家  ›  专栏  ›  技术社区  ›  xil3

在单例中保留对线程的引用是否安全?

  •  6
  • xil3  · 技术社区  · 14 年前

    让我给你一个场景。

    假设我加载的第一个活动也创建了一个线程,该线程将在后台无限期运行。

    现在,如果我转到另一个活动,我假设我最初在主活动中创建的线程将继续运行。

    所以,现在我要问的主要问题是-为了管理来自其他活动的后台线程,是否可以安全地将对该线程的引用存储在单例对象中?

    2 回复  |  直到 14 年前
        1
  •  4
  •   Jaydee    14 年前

    是和否。理论上,你不会有问题,但你不能允许引用逃逸。

    在singleton对象中保持引用私有可能会产生问题,它不能将引用传递给任何其他对象,也不能允许任何其他对象访问它,否则它可能会失去控制。

    其次,由活动创建的线程不能允许访问其成员变量或允许对它们的引用转义。

    关于这个领域的一本好书是Brian Goetz的《Java并发实践》

        2
  •  2
  •   Romain Hippeau    14 年前

    实际上,如果有多个类装入器,则需要小心。如果使用同一个类加载器加载类,则Singleton仅为Singleton。如果应用程序中有多个类装入器运行相同的类,则每个类中都会有另一个单例实例。

    大多数独立应用程序只使用一个类加载器,因此没有任何问题。如果你只有一个类加载器,那么你就可以了。