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

时间:2010-11-15 10:49:40

标签: java android multithreading singleton

让我给你一个场景。

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

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

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

2 个答案:

答案 0 :(得分:4)

是和否。从理论上讲,你没有问题,但你不能允许引用转义。

将单个对象中的引用保持为私有,可能会出现问题,它不能将引用传递给任何其他内容或允许通过其他任何内容访问它,否则它将失去控制权。

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

这方面的好书是Brian Goetz撰写的“Java Concurrency in Practice”

答案 1 :(得分:2)

实际上,如果你有多个类加载器,你需要小心的地方。如果您使用相同的类加载器来加载类,则Singleton只是一个单例。如果您的应用程序中有多个类加载器运行相同的类,则每个类中都会有另一个单例实例。

大多数独立应用只使用一个类加载器,因此没有任何问题。如果你只有一个类加载器,那么你会没事的。