我对如何解决以下问题有点困惑:
我有一个大型(java se)应用程序,它基于生产者-消费者模型,并且主要以多线程方式工作。例如。 10 个线程正在获取消息,40 个线程正在消费消息。现在我有需要在所有线程中共享的对象,例如 ThreadPoolExecutor。伪代码:
ExecutorService execService =
new ThreadPoolExecutor(10, 10, 1, TimeUnit.SECONDS, some_queue);
execService.submit(new Consumer(sharedEntityManagerFactory)
这些消费者线程将每条获取的消息提交到另一个 ThreadPoolExecutor,该线程具有处理该消息的线程。
现在我的问题是,如何在所有线程之间有效地共享对象(例如 DataAccessObjects 的 EntityManagerFactoryObject(我认为应该是单例))?这只是一个示例,它也可以是一个简单的列表,或更复杂的 POJO。
一个可能的(/好的)解决方案是通过依赖注入(inject)(JavaSE)来做到这一点吗?据我所知,这将是一个很好的解决方案,但对象仅创建一次,并且线程仅保存引用,而不是真正的新对象。
最佳答案
详细信息会有所不同,具体取决于您计划使用的依赖项注入(inject)库。但大多数/全部都提供了指定注入(inject)对象是单例的可能性,即:库只会创建它一次,并且相同的实例将被注入(inject)到所有客户端。
关于java - 共享对象设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30084890/