У меня есть два класса CallISPSubscriberDump (этот класс читает из базы данных общее количество идентификаторов процесса, для каждого идентификатора процесса он вызывает класс ISPSubscriberDump для создания файла) и ISPSubscriberDump (используется для создания дампа абонента ISP файл, который отправляется в сеть для подтверждения). Я использую службу Executor для создания нескольких потоков и передачи идентификатора процесса в ISPSubscriberDump в своем конструкторе. Но в этом подходе мне нужно создать столько объектов, сколько будет выполняться в потоке. Этот процесс работает нормально. Как я должен запускать поток для каждого идентификатора процесса, есть ли другой способ, которым я могу создать только один объект и разбивать несколько объектов?java multithreding, создающий объект для каждого потока
public class CallISPSubscriberDump
{
public void createFile()
{
List<Integer> totalId = new ArrayList<Integer>();
List<String> dataFlag = new ArrayList<String>();
//Reading process Id and dataFlag from database and populating in list
try
{
if (totalId.size() == 0)
{
throw new Exception("No process id found for ISP Dump");
}
else
{
// MAX_THRAED is max limit of threads
int maxthred = totalId.size() < Integer.parseInt(logGererator.getProperty("MAX_THRAED")) ? totalId.size() :
Integer.parseInt(logGererator.getProperty("MAX_THRAED"));
ExecutorService executor = Executors.newFixedThreadPool(maxthred);
for (int cnt = 0; cnt < totalId.size(); cnt++)
{
//For a particular thread assigning a particular process I create N object of ISPSubscriberDump for N thread and assign process Id in its constructor
executor.execute(new ISPSubscriberDump(totalId.get(cnt),dataFlag.get(cnt)));
}
executor.shutdown();
while (!executor.isTerminated())
{
}
System.out.println("Finished all threads");
}
}
catch (Exception e)
{
e.printStackTrace();
}
public class ISPSubscriberDump implements Runnable
{
private int processId;
private String dataFlag;
public ISPSubscriberDump(int processId,String dataFlag){
this.processId=processId;
this.dataFlag=dataFlag;
}
public void run()
{
// File Creation
createFile();
}
createFile()
{
int currentProcessId=processId;
String currentDataFlag= dataFlag;
// File Creation and provising happened here using currentProcessId and currentDataFlag
}
}
Вы можете использовать очередь, и ваши потоки выбирают задачи объекта оттуда. – PeterK
Даже с Очередью я не могу ее решить, пожалуйста, объясните подробнее –