#java #многопоточность #arraylist
Существует ArrayList, который в себе содержит ссылки на файлы для скачивания. Существует метод downloadFile который может скачать эти файлы. Кусок кода: for (String i : arrayList) { downloadFile(i); } позволяет скачать все ссылки по очереди Подскажите пожалуйста, каким образом можно запустить скачку в несколько потоков?
Ответы
Ответ 1
Эх, всё вам разжевать надо. А вы документацию читали? Listthreads = 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, с помощью нее можно организовать пул потоков и там некоторые вещи неплохо оптимизированы.больше о ее возможностях можно узнать тут
Комментариев нет:
Отправить комментарий