Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.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 Spring与多线程_Java_Multithreading_Spring_Ioc Container_Autowired - Fatal编程技术网

Java Spring与多线程

Java Spring与多线程,java,multithreading,spring,ioc-container,autowired,Java,Multithreading,Spring,Ioc Container,Autowired,在spring应用程序中,我需要启动数量可变的线程,这些线程依次启动数量可变的线程(即第I个线程需要启动Ki个线程的线程)。 假设每个“I线程”都包含一个自动连接的内部类,我将如何生成这些实例? 因此,我有一个A bean,它需要以某种方式生成bean的I实例,这个bean需要spring管理以满足其依赖性 我已经编写了一个简短的示例代码,我认为这是我的解决方案的基础,并且我已经标记了我不确定如何编写的代码??: @Component public class MasterOrchestrato

在spring应用程序中,我需要启动数量可变的线程,这些线程依次启动数量可变的线程(即第I个线程需要启动Ki个线程的线程)。
假设每个“I线程”都包含一个自动连接的内部类,我将如何生成这些实例? 因此,我有一个
A bean
,它需要以某种方式生成bean的
I
实例,这个bean需要spring管理以满足其依赖性

我已经编写了一个简短的示例代码,我认为这是我的解决方案的基础,并且我已经标记了我不确定如何编写的代码??:

@Component
public class MasterOrchestrator {    
 public void do(List<DataObjWrapper> list){
    ExecutorService es = Executors.newFixedThreadPool(list.size());
    for (DataObjWrapper dataObjWrapper : list){
        es.submit(???);
    }
 }    
}
@Component
public class ThreadWorkerI implements Runnable{    
    private int numThreadsForMessageType;
    private int numRunsForMessageType;
    private DataObj dataObj;
        public ThreadWorkerI(int numThreadsForMessageType, int numRunsForMessageType, DataObj dataObj){
        this.numThreadsForMessageType = numThreadsForMessageType;
        this.numRunsForMessageType = numRunsForMessageType;
        this.dataObj = dataObj;
    }
        @Autowired
    private JmsTemplate jmsTemplate;   
    public void run(){  
        ExecutorService es = Executors.newFixedThreadPool(numThreadsForMessageType);
        for (int i=0;i<numRunsForMessageType;i++){
            es.submit(new ActualWorker(i));
        }       
    }

    private class ActualWorker implements Runnable{
        private int numRun;
        private ActualWorker(int numRun){
            this.numRun = numRun;
        }
        public void run(){
            //send message using the jmsTemplate the dataObj and numRun
        }
    }
}
@组件
公共类主编排器{
公共无效do(列表){
ExecutorService es=Executors.newFixedThreadPool(list.size());
for(DataObjWrapper DataObjWrapper:list){
提交(??);
}
}    
}
@组成部分
公共类ThreadWorkerI实现可运行{
私有int numThreadsForMessageType;
私有int numRunsForMessageType;
私有数据对象;
public ThreadWorkerI(int numThreadsForMessageType、int numRunsForMessageType、DataObj DataObj){
this.numThreadsForMessageType=numThreadsForMessageType;
this.numRunsForMessageType=numRunsForMessageType;
this.dataObj=dataObj;
}
@自动连线
私有JmsTemplate JmsTemplate;
public void run(){
ExecutorService es=Executors.newFixedThreadPool(numThreadsForMessageType);

对于(int i=0;i最好使用线程池或Spring的抽象,而不是启动自己的线程。然后,您的任务可以是Spring Bean或手动实例化。

最好使用线程池或Spring的抽象,而不是启动自己的线程。然后,您的任务可以是Spring Bean或手动实例化。

您可以告诉我们e注释允许Spring将依赖项注入到您的工作程序中,即使是未由Spring容器显式管理的工作程序。

您可以使用注释允许Spring将依赖项注入到您的工作程序中,即使是未由Spring容器显式管理的工作程序。

将引用传递给MasterOrch如何将estrator或ThreadWorker放入Runnable的构造函数中?然后可以将所有配置放入@Component类中

例如:

 private class ActualWorker implements Runnable{
      private int numRun;
      private ActualWorker(ThreadWorkerI owner, int numRun){
          this.numRun = numRun;
      }
      public void run(){
          //send message using owner.jmsTemplate, owner.dataObj and numRun
      }
  }

将对MasterOrchestrator或ThreadWorker的引用传递到Runnable的构造函数中如何?然后可以将所有配置放入@Component类中

例如:

 private class ActualWorker implements Runnable{
      private int numRun;
      private ActualWorker(ThreadWorkerI owner, int numRun){
          this.numRun = numRun;
      }
      public void run(){
          //send message using owner.jmsTemplate, owner.dataObj and numRun
      }
  }

我浏览了您(之前)提供的链接,我不确定这对我有什么帮助。请注意,在示例中,他们自己实例化了
MessagePrinterTask
实例,这意味着没有spring托管bean。如果“I线程”如果是spring管理的Bean,那么他们可以自动连接我需要的东西,他们会实例化一个内部类,该类可以访问他们的自动连接资源。问题在于第一个链接。我可以只执行context.getBean I次,但我宁愿不这样做。我浏览了您(之前)给出的链接我不确定这对我有什么帮助。注意,在这个例子中,他们自己实例化了
MessagePrinterTask
实例,这意味着没有spring管理的bean如果是spring管理的Bean,那么他们可以自动连接我需要的东西,他们会实例化一个可以访问他们的自动连接资源的内部类。问题是第一个链接。我可以只做context.getBean I次,但我不想。嗨,谢谢你的回答。从链接的外观和一些快速的谷歌搜索来看,似乎在@Configurable可以解决这个问题,我只是不确定这是否是解决这个问题的“春季方式”。我会等一等,看看是否有人提供了一种方式,让我留在容器中,并且仍然满足我的需求。如果没有,我会接受你的答案(我已经超过你了).另外,为了验证一下,因为我是纺织行业的新手-如果我使用LTW,那么我只需为类对象的第一次实例化付出“严重”的代价,对吗?之后它就像一个普通的Springbean(当然会有一些开销)您好,谢谢您的回答。从链接的外观和一些快速的谷歌搜索来看,@Configurable似乎可以解决这个问题,我只是不确定这是否是解决这个问题的“春季方式”。我会等一等,看看是否有人提供了一种方式,允许我留在容器中,仍然满足我的需求。如果不是,我会接受您的答案(我已经投票给你了)。另外,我只是想验证一下,因为我是纺织行业的新手——如果我使用LTW,那么我只需要为类的对象的第一次实例化付出“严肃”的代价,对吧?之后它就像一个普通的Springbean(当然会有一些开销)很抱歉,我觉得这是一种变通方法。我也认为Biju的解决方案是一种变通方法,但它更优雅一些,因为实际的工作人员在某种程度上得到了管理。我仍然在寻找“春季方式”如果我能找到它,我会在这里更新。很抱歉,这对我来说是一个解决办法。我也认为Biju的解决方案是一个解决办法,但它更优雅一点,因为实际的工作人员是以某种方式管理的。我仍然在寻找这样做的“春季方式”。如果我能找到它,我会在这里更新。