java - 共享对象设计模式

标签 java multithreading design-patterns dependency-injection

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

我有一个大型(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/

相关文章:

java - Jdbc DataSource多线程不释放连接

multithreading - 锁定和解锁互斥体的效率如何?互斥体的成本是多少?

c# - 扩展方法(类)或访问者模式

java - 如何实现 - 创建结果的通用方法

java - 当端口存在时,为什么我会收到 Java NoSuchPortException?

java - Android - 如何将 mainActivity 中的方法与另一个类中的静态 boolean 变量同步?

java - 使用 p2 更新 Eclipse E4 应用程序

java - java中清理/删除未使用的 map 元素的策略

c++ - 在 C++ 中为函数计时

design-patterns - 如何在Rust中从堆栈上的多个实例中可变地使用一个实例?