共享对象设计模式

Shared Objects Design Pattern

我对如何解决以下问题有点困惑:

我有一个很大的 (java se) 应用程序,它基于生产者-消费者模型并且主要以多线程方式工作。例如。 10 个线程在获取消息,40 个线程在消费消息。现在我有了需要在所有线程中共享的对象,例如 ThreadPoolExecutor。伪代码:

ExecutorService execService = 
new ThreadPoolExecutor(10, 10, 1, TimeUnit.SECONDS, some_queue);

execService.submit(new Consumer(sharedEntityManagerFactory)

这些消费者线程将每条获取的消息提交给另一个 ThreadPoolExecutor,后者具有处理此消息的线程。

现在我的问题是,我如何有效地跨所有线程共享对象(例如 EntityManagerFactoryObject(我认为它应该是一个单例)用于 DataAccessObjects)?这只是一个例子,它也可以是一个简单的列表,或者更复杂的 POJO。

一个可能的(/好的)解决方案是通过依赖注入(JavaSE)来做到这一点吗?据我所知,这将是一个很好的解决方案,但对象只创建一次,线程只持有引用,而不是真正的新对象。

具体细节因您计划使用的依赖注入库而异。但是 most/all 它们提供了指定注入对象是单例的可能性,即:库只会创建它一次,并且所有客户端都会注入相同的实例。