2014-10-15 3 views
0

У меня есть два класса 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 
    } 

    } 
+0

Вы можете использовать очередь, и ваши потоки выбирают задачи объекта оттуда. – PeterK

+0

Даже с Очередью я не могу ее решить, пожалуйста, объясните подробнее –

ответ

-1

TL; DR

"есть ли другой способ, в котором я могу создать только один объект и клеть несколько объектов?"

Возможно, вы можете использовать класс singleton/factory.

Смежные вопросы