Я пытаюсь использовать потоки, чтобы моя программа выполняла некоторые части параллельно, и у меня возникают проблемы.
Цель - обработать список ссылок, urlList
с помощью функции ImageProcessor().processLink
. У меня есть две проблемы, которые я пытаюсь решить:
- Как мне это сделать oop, чтобы использовать N потоков в пуле, в данном случае 10? То есть я хочу обрабатывать 10 ссылок одновременно.
- Функция обработки выше возвращает
File
, который мне нужно добавить в массив, fileList
. Что касается многопоточности, как я справлюсь с этим?
Это то, что у меня так далеко:
ArrayList<String> urlList = new ArrayList<>(Arrays.asList(arr.split("\\r?\\n"))) ;
ArrayList<File> fileList = new ArrayList<>();
ExecutorService executor = Executors.newFixedThreadPool(10);
//process the requested files
for (int i = 0; i < urlList.size(); i++){
Future<File> value = executor.submit(new Callable<File>() {
@Override
public File call(int i) throws IOException {
return new ImageProcessor().processLink(urlList.get(i));
}
});
try {
fileList.add(value.get());
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}