Не могу запустить цикл в отдельном потоке. Есть метод IndexAll(). Нужно заменить ExecutorService на запуск цикла метода в новый поток
Не могу запустить цикл в отдельном потоке. Есть метод IndexAll(). Нужно заменить ExecutorService на запуск цикла метода в новый поток
public class IndexingServiceImpl implements IndexingService {
private static final int processorCoreCount = Runtime.getRuntime().availableProcessors();
private ExecutorService executorService;
private final PageRepository pageRepository;
private final SiteRepository siteRepository;
private final LemmaRepository lemmaRepository;
private final IndexSearchRepository indexSearchRepository;
private final LemmaParser lemmaParser;
private final IndexParser indexParser;
private final SitesList sitesList;
@Override
public boolean urlIndexing(String url) {
if (urlCheck(url)) {
log.info("Start reindexing site - " + url);
executorService = Executors.newFixedThreadPool(processorCoreCount);
executorService.submit(new SiteIndexed(pageRepository, siteRepository, lemmaRepository, indexSearchRepository, lemmaParser, indexParser, url, sitesList));
executorService.shutdown();
return true;
} else {
return false;
}
}
@Override
public boolean indexingAll() {
if (isIndexingActive()) {
log.debug("Indexing already started");
return false;
} else {
List<Site> siteList = sitesList.getSites();
executorService = Executors.newFixedThreadPool(processorCoreCount);
for (Site site : siteList) {
String url = site.getUrl();
SitePage sitePage = new SitePage();
sitePage.setName(site.getName());
log.info("Parsing site: " + site.getName());
executorService.submit(new SiteIndexed(pageRepository, siteRepository, lemmaRepository, indexSearchRepository, lemmaParser, indexParser, url, sitesList));
}
executorService.shutdown();
}
return true;
}
@Override
public boolean stopIndexing() {
if (isIndexingActive()) {
log.info("Indexing was stopped");
executorService.shutdownNow();
return true;
} else {
log.info("Indexing was not stopped because it was not started");
return false;
}
}
private boolean isIndexingActive() {
siteRepository.flush();
Iterable<SitePage> siteList = siteRepository.findAll();
for (SitePage site : siteList) {
if (site.getStatus() == Status.INDEXING) {
return true;
}
}
return false;
}
private boolean urlCheck(String url) {
List<Site> urlList = sitesList.getSites();
for (Site site : urlList) {
if (site.getUrl().equals(url)) {
return true;
}
}
return false;
}
}
Источник: Stack Overflow на русском