Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 共享对象设计模式_Java_Multithreading_Design Patterns_Dependency Injection - Fatal编程技术网

Java 共享对象设计模式

Java 共享对象设计模式,java,multithreading,design-patterns,dependency-injection,Java,Multithreading,Design Patterns,Dependency Injection,我对如何解决以下问题有点困惑: 我有一个大的(JavaSE)应用程序,它基于生产者-消费者模型,主要是多线程的。例如,10个线程正在获取消息,40个线程正在消费消息。现在我有了需要在所有线程中共享的对象,比如ThreadPoolExecutor。伪代码: ExecutorService execService = new ThreadPoolExecutor(10, 10, 1, TimeUnit.SECONDS, some_queue); execService.submit(new Co

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

我有一个大的(JavaSE)应用程序,它基于生产者-消费者模型,主要是多线程的。例如,10个线程正在获取消息,40个线程正在消费消息。现在我有了需要在所有线程中共享的对象,比如ThreadPoolExecutor。伪代码:

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

execService.submit(new Consumer(sharedEntityManagerFactory)
这些使用者线程将每个获取的消息提交给另一个ThreadPoolExecutor,后者有线程来处理此消息

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


一个可能的(/好的)解决方案是在依赖注入(JavaSE)中实现这一点吗?据我所知,这将是一个伟大的解决方案,但对象只创建一次,线程只保存引用,而不是一个真正的新对象。

根据您计划使用的依赖项注入库,详细信息会有所不同。但是它们中的大多数都提供了指定注入对象为单例的可能性,也就是说:库只会创建它一次,同一个实例也会注入所有客户端。

因此,即使在JavaSE中,通过依赖项注入来解决这个问题也是一种很好的方法?