Witam, to mój pierwszy post.
Mam problem z wątkami i pętlą. Mam kod, który pobiera linki do ogłoszeń pracy ze strony pracuj.pl. Chciałbym, żeby wszystko działo się naraz z użyciem wielu wątków.
Główna klasa wygląda tak:
package org.example;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Set;
import java.util.TreeSet;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Pracuj {
private static final String PRACUJ_PL_URL = "https://www.pracuj.pl/praca/warszawa;wp?rd=0&pn=";
public static void main(String[] args) throws Exception {
SeparetedLinks separetedLinks = new SeparetedLinks();
Set<String> links = new TreeSet<>();
ExecutorService executorService = Executors.newFixedThreadPool(10);
long start = System.currentTimeMillis();
try {
executorService.submit(OperationsOnFiles::deleteFiles);
executorService.submit(() -> {
try {
getLinks(separetedLinks, links);
} catch (IOException e) {
throw new RuntimeException(e);
}
});
} finally {
ArrayList<String> listOfLinks = new ArrayList<>(links);
OperationsOnFiles.saveFiles(listOfLinks);
System.out.println("Saved " + listOfLinks.size() + " links.");
}
long end = System.currentTimeMillis();
System.out.println(end - start);
executorService.shutdown();
}
private static void getLinks(SeparetedLinks separetedLinks, Set<String> links) throws IOException {
int i = 1;
int startValue;
int endValue;
while (IsUrlValid.isValid(PRACUJ_PL_URL + i)) {
startValue = links.size();
separetedLinks.addLinksToList(links, PRACUJ_PL_URL + i);
endValue = links.size();
if (startValue == endValue) {
break;
}
i++;
}
}
}
Dopiero uczę się o wątkach, a z "programowaniem" mam styczność od pół roku. Bez dodania ExecutorService
program działał dobrze i zapisywał do pliku wszystkie linki z pracuj.pl, chcę skrócić jego czas działania, zoptymalizować kod. Dziękuję za wszystkie rady i podpowiedzi.