我对如何解决以下问题感到有点困惑:
我有一个很大的(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。
一个可能(/好)的解决方案是使用依赖注入(JavaSE)吗?据我所知,这将是一个greate解决方案,但对象只创建一次,并且线程只保存引用,而不是一个真正的新对象。
答案 0 :(得分:2)
根据您计划使用的依赖项注入库,详细信息会有所不同。但是大多数/所有这些都提供了指定注入对象是单例的可能性,即:库只会创建一次,同样的实例也会注入所有客户端。