我可以用Guice为每个线程注入不同的@Singleton吗?

时间:2017-02-28 08:17:54

标签: java annotations singleton guice

我已经开始研究已建立的代码库。它最初是为了做一件事而设立的。我的任务是使它更通用(通过添加额外的命令行参数)。当您以顺序方式运行代码两次时,我的代码更改工作正常,但是当我并行运行代码时,它会失败。原因是,我们使用Guice的@Singleton依赖注入注释来处理两个关键类。这些类包含一些数据结构,并通过应用程序的执行来操作它们。在并行运行时使用单例的问题在于,同一个对象被赋予两个线程,并且它们会添加和删除相同的数据结构,从而导致混乱并导致空指针。即使正常运行(没有并行线程),摆脱@Singleton注释也会导致问题。在代码中,五个不同的对象意味着将这些单例用于某种功能。

我需要的是这些"单身"的实例。我创建的每个线程的类。在Guice中是否有某种方法可以将@Singleton注释替换为将为其使用的线程注入正确实例的内容。请记住,我想继续使用Guice。

我知道一个廉价的解决方案就是在每个线程中创建这些类的实例,并在它们被创建时将它们传递给每个线程,但它会违反当前的实现。我希望以干净/自动化的方式进行,因为我不确定我可能创建了多少个线程。所以我不想在Module类中绑定不同的实例,因为这需要我事先对它们进行硬编码。

在这些限制下,有没有人有解决方案?

0 个答案:

没有答案