2016-12-13 2 views
0

Threadpool отклоняет задачи при отправке. Размер Threadpool фиксирован и равен 8. Даже если я не отказываюсь от задач более 8, он отклоняется. Я пытался использовать блокирующую очередь, но мне это не помогает.RejectedExecutionException при выполнении задач с использованием threadpool: JAVA

Вот мой фрагмент кода

try { 
      List<Future> tasks = new ArrayList<Future>(); 
      ThreadPoolExecutor tpe = (ThreadPoolExecutor) Executors.newFixedThreadPool(10); 
      Process process = new Process(); 
      ProcessingJobMeta meta = process.getPJM(); 
      List<CuratedInput> cil = meta.getCuratedInputList(); 
      for (final CuratedInput ci : cil) { 
       for (final Preperation prep : Preperation.values()) { 
        for (final Export export : Export.values()) { 
         Runnable runnable = new Runnable() { 
          public void run() { 
           LOGGER.info("Executing.................." + prep.toString()); 
           LOGGER.info("Executing.................." + export.toString()); 
           PreperationFactory.getPreperation(prep.toString(), ci); 
           ExportFactory.getExport(export.toString(), ci); 
          } 
         }; 
//      tpe.submit(runnable); 
         tasks.add((Future) tpe.submit(runnable)); 

         for (Future p : tasks) { 
          LOGGER.info("---------------inside the futures for loop------------"); 
          LOGGER.info("Result of the future executed ------> " + p.get()); 
         } 

         tpe.shutdown(); 

         while (!tpe.isShutdown()) { 

         } 
        } 
       } 

      } 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

ответ

1

Ваша проблема заключается в том, что ваш выключая бассейн внутри цикла и attemting, чтобы добавить больше потоков к уже отключения пула. разместить эти строки из петли

tpe.shutdown(); 

while (!tpe.isShutdown()) { 

} 

что-то вроде этого

List<Future> tasks = new ArrayList<Future>(); 
     ThreadPoolExecutor tpe = (ThreadPoolExecutor) Executors.newFixedThreadPool(10); 
     Process process = new Process(); 
     ProcessingJobMeta meta = process.getPJM(); 
     List<CuratedInput> cil = meta.getCuratedInputList(); 
     for (final CuratedInput ci : cil) { 
      ..... 
     } 

     tpe.shutdown(); 
     while (!tpe.isShutdown()) { 

     } 

Пожалуйста, попробуйте что

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