Чтобы использовать потоки, а также поддерживать согласованность наборов, вам просто нужно создать поток, который получает переменную, которую вы хотите добавить в набор, но создает пустую, поэтому поток заполняет ее по завершении, а затем добавляет ее в набор.
Простой пример этого может быть:
Main.class
for (String link : links) {
String validUrl = null;
taskThread = new Thread( new WebDownloadThreadHanlder(link, validUrl, barrier));
taskThread.start();
if (validUrl != null) {
allUrlsOfDomain.add(validUrl);
}
}
barrier.acquireUninterruptibly(links.size());
WebDownloadThreadHandler.class
public class WebDownloadThreadHandler implements Runnable {
private String link;
private String validUrl;
private Semaphore barrier;
public ScopusThreadHandler(String link, String validUrl, Semaphore barrier) {
this.link = link;
this.validUrl = null;
this.barrier = barrier;
}
public void run () {
try {
Document document = Jsoup.connect(this.link).userAgent("Mozilla/5.0");
Elements elements = document.select(YOUR CSS QUERY);
/*
YOUR JSOUP CODE GOES HERE, AND STORE THE VALID URL IN: this.validUrl = THE VALUE YOU GET;
*/
} catch (IOException) {
e.printStackTrace();
}
this.barrier.release();
}
}
То, что вы делаете здесь, - это создание потока для каждой сети, из которой вы хотите получить все ссылки, и сохранение их в переменных. Если вы хотите получить более одной действительной ссылки с каждой страницы, вы можете сделать это, используя Установите и добавьте его в глобальный набор (добавив его). Дело в том, что для сохранения согласованности вашего кода вам нужно сохранять полученные значения в переменной, которую вы передаете потоку в качестве аргумента, используя ключевое слово THIS .
Надеюсь, это поможет! Если вам нужно что-то еще, не стесняйтесь спрашивать меня!