2013-07-04 3 views
1

Я столкнулся с openMP, который можно использовать для распараллеливания циклов for в c, C++. Конечно, OpenMP мог бы сделать гораздо больше, чем просто. Но мне любопытно, можем ли мы распараллелить циклы for в java для оптимизации производительности программ. Предположим, что у меня есть n итераций в цикле for, существует ли способ параллельного запуска этих итераций?Параллелизировать для циклов в java

+2

Использование Threads должно помочь? –

+0

@JunedAhsan: В идеале, существует более высокоуровневое решение. – Thilo

+0

Если каждая итерация занимает много времени и не зависит от предыдущих вычислений в цикле, используйте ThreadPoolExecutor и отправляйте вычисления как задачи. – Tala

ответ

4

Если каждая итерация занимает много времени и не зависит от предыдущих вычислений в цикле, то используйте ExecutorService и отправьте вычисления как задачи.

ExecutorService executorService = Executors.newFixedThreadPool(4); // number of threads 
for (int i = 0; i < n; i++) { 
    // declare variables as final which will be used in method run below 
    final int count = i; 
    executorService.submit(new Runnable() { 
     @Override 
     public void run() { 
      //do your long stuff and can use count variable 
     } 
    }); 
} 
+0

Когда я пытаюсь сделать так, как вам было предложено, im получает следующую ошибку: не может ссылаться на не конечные переменные внутри внутреннего класса, определенного другим способом , В моем цикле for используется несколько не конечных переменных. – Praveen

+0

добавленный пример, как решить эту проблему – Tala

+0

Спасибо, краткий и эффективный ответ. Возможно, добавьте 'executorService.shutdown()', чтобы немного синхронизировать вещи. – Austin

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