弹簧和multithreading

我需要启动一个可变数量的线程,这些线程又会在spring应用程序中启动不同数量的线程(即I线程需要启动Ki线程的线程)。
假设每个“I线程”包含一个自动assembly的内部类,我将如何生成这些实例? 所以我有一个A bean需要以某种方式生成I需要进行Spring管理以满足其依赖关系的bean实例。

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

 @Component public class MasterOrchestrator { public void do(List 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 } } } 

DatObjWrapper包含numThreadsForMessageTypenumRunsForMessageTypedataObj等成员。

您可以使用@Configurable批注让Spring将依赖项注入您的worker – 即使是Spring容器未明确管理的那些。

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

如何将对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 } }