2011-03-31 21 views
0

如果我在Module之一中使用requestStaticInjection()以在类中注入static字段,并且该static字段可能由不是调用Guice.createInjector()的字段访问,那么是否需要标记static字段volatile以确保它对其他线程可见?从我所知道的一切来看,它看起来像是在线程中发生的静态注入,调用Guice.createInjector(),并且没有什么特别的事情发生,所以我认为volatile将是一个好主意。我是否需要使静态注入的值变化?

回答

2

IIRC吉斯静态喷射在Injector创建时间进行。

因此,如果其他线程运行那创建,应该没有问题。

否则,您可能会遇到问题;但我一般会避免在Injector创建具有场景后面进行的工作太多了,我想一开始的“东西”后Injector已被Guice.createInjector()返回。

你的代码的一些更详细的描述可能有助于找到更好的回答你的问题。

+0

同意。一般来说,你不应该注入对其他线程可见的对象。在大多数应用程序中,这意味着您将在启动线程池或接受传入连接之前执行静态注入。 – 2011-03-31 06:31:17

+0

其他线程直到注入器创建之后才会启动。那么在那种情况下,离开'volatile'没有问题? – 2011-03-31 12:36:09

+1

确切地说,在这种情况下没有问题。 – jfpoilpret 2011-04-01 04:37:56