Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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多线程共享对象和bean自动连接_Java_Multithreading_Spring_Concurrency_Inversion Of Control - Fatal编程技术网

Java多线程共享对象和bean自动连接

Java多线程共享对象和bean自动连接,java,multithreading,spring,concurrency,inversion-of-control,Java,Multithreading,Spring,Concurrency,Inversion Of Control,我们有一个基于spring的应用程序,它有两个可运行级别: 父级(dispatchers)和子级(Loader),其中在ThreadPoolExecutor中运行的每个父级都有一组子级(同样在ThreadPoolExecutors中),这些子级需要一组特定于父级的值(它们当前通过调用parent.getSomeProperty()获得) 我的问题是:如何才能自动连接单亲及其子女使用的bean?或者有没有办法让这些孩子知道他们的“会话”/“上下文”之类的说法(可以是通过散列“某物”获得的简单ID)

我们有一个基于spring的应用程序,它有两个可运行级别: 父级(dispatchers)和子级(Loader),其中在ThreadPoolExecutor中运行的每个父级都有一组子级(同样在ThreadPoolExecutors中),这些子级需要一组特定于父级的值(它们当前通过调用parent.getSomeProperty()获得)

我的问题是:如何才能自动连接单亲及其子女使用的bean?或者有没有办法让这些孩子知道他们的“会话”/“上下文”之类的说法(可以是通过散列“某物”获得的简单ID)

示例用例:

  • 每个dispatcher都有一组用户属性(如UserID、第三方令牌/密码、计数器、isborted..等),加载程序会引用这些属性
  • 加载程序从第三方不同的端点获取数据,生成公共对象(具有来自父方和第三方的属性),并将它们放入一个FastMap(Javolution)中,另一个bean在另一个线程中执行DB INSERT/UPDATE,从而成批使用该FastMap

我目前正在将dispatcher“parent”传递给它的所有子级,这使得使用AppContext.getBean(…)时它是静音的,然后设置公共值/传递父级。

由于我没有得到任何答案,我将发布我自己的实现,到目前为止:

我实现了一个SharedStore静态对象,它主要有两种方法:

void putShared(Object o, String objectKey)
<T> T getShared(String objectKey, int parentCode, Class<T> type)
这将使用Thread.CurrentThread().hashCode()将对象放入并发哈希映射

并且该子级在构造函数中设置了一个密钥:

//Child constructor in BaseRunnable abstract class
private int parentKey = Thread.currentThread().hashCode();
并使用以下命令调用getMethod:

//Child
getShared("someKey", parentKey, SomeClass.class);
并根据需要使用它(由子线程中ThreadPoolExecutor内的多个子线程同时执行)

所有可运行bean都是自动连接的原型,带有lazy init和extend基抽象类,后者实现默认构造函数并设置parentKey,其余的东西,如DAOs和第三方api对象,通常是自动连接的


感谢批评!

您是否考虑过将参数封装到某种上下文对象中,并将其传递给子工作者(可能使用队列)而不是将子对象与父对象耦合?同样的问题:映射共享“上下文”的关键是什么孩子使用的是什么?或者,传递它与传递指向父母的指针相同…不能自动连线你的父母如何获得所有这些属性?它不同,有三种主要用途:AMQ消息、HTTP请求、DB(基于用户的东西)孩子是否可以属于多个父母?
//Child
getShared("someKey", parentKey, SomeClass.class);