Мне нужно запустить переменное число потоков, каждое из которых, в свою очередь, запускает различное количество потоков (то есть, я потоков, где I-й поток должен запускать потоки Ki) в приложении Spring.
Предполагая, что каждый из «I потоков» содержит внутренний класс, который автоматически подключается, как я буду генерировать эти экземпляры?
Итак, у меня есть A bean
, который должен каким-то образом генерировать I
экземпляров bean-компонента, который должен управляться пружиной для удовлетворения его зависимостей.
Я написал короткий пример кода, который, как мне кажется, является основой для моего решения, и я пометил код, который я не знаю, как писать ???:
@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
}
}
}
DatObjWrapper
содержит среди других членов numThreadsForMessageType
, numRunsForMessageType
и dataObj
.