Страницы

Поиск по вопросам

воскресенье, 26 января 2020 г.

Многопоточность и ArrayList

#java #многопоточность #arraylist


Существует ArrayList, который в себе содержит ссылки на файлы для скачивания. Существует
метод downloadFile который может скачать эти файлы.

Кусок кода:

 for (String i : arrayList) {
     downloadFile(i);
 }


позволяет скачать все ссылки по очереди

Подскажите пожалуйста, каким образом можно запустить скачку в несколько потоков?
    


Ответы

Ответ 1



Эх, всё вам разжевать надо. А вы документацию читали? List threads = new ArrayList(); for (String s : arrayList) { final String finalS = s; // у Java замыкания слабоваты, нужна копия Thread thread = new Thread() { public void run() { downloadFile(finalS); } }; threads.add(thread); thread.start(); } for (Thread t : threads) { t.join(); } Проверка: http://ideone.com/4L6nNM

Ответ 2



Как вариант, вот такое решение: int threadCount = 10; ExecutorService executorService = Executors.newFixedThreadPool(threadCount); for (String s : arrayList) executorService.submit(() -> downloadFile(s)); executorService.shutdown(); while (executorService.isTerminated() && !Thread.currentThread().isInterrupted()) {}

Ответ 3



arrayList.parallelStream().forEach(f -> f.downloadFile(f)); выполняет в нескольких потоках и качает параллельно

Ответ 4



попробуйте библиотеку java.util.concurrent, с помощью нее можно организовать пул потоков и там некоторые вещи неплохо оптимизированы.больше о ее возможностях можно узнать тут

Комментариев нет:

Отправить комментарий