Я создаю веб-сканер с шаблоном проектирования Selenium и MVC на Java.Я пытаюсь достичь трех вещей:
Чтобы создать n потоков в зависимости от длины моей базы данных (sidb), хранящей настройки поиска.
Поскольку в моем графическом интерфейсе пользователя есть табличная панель с данными, мне нужно завершить все потоки, прежде чем продолжить.В противном случае я потеряю некоторые данные, потому что метод table.refresh () вызывается на раннем этапе.
Поскольку более чем 5 запущенных одновременно окон Firefox слишком сильно замедляют работу компьютера, я бы хотелмаксимум 5 потоков, работающих в любой момент времени.
Следующий код решает первую проблему и в некоторой степени вторую.Мне пришлось сделать неприятный Thread.sleep (), чтобы он не запускал обновление на столе слишком рано.
public void runSearchItems() {
for (int i = 0; i < sidb.getSize(); i++) {
final int num = i;
Thread tn = new Thread(new Runnable() {
@Override
public void run() {
if (sidb.getSearhItem().get(num).getFormevent().getDomainBox().equalsIgnoreCase("www.someURL.com") == true) {
String searchField = sidb.getSearhItem().get(num).getFormevent().getSearchField();
int searchCat = sidb.getSearhItem().get(num).getFormevent().getSearchCategory();
boolean defect = sidb.getSearhItem().get(num).getFormevent().isDefectCheck();
boolean region = sidb.getSearhItem().get(num).getFormevent().isRegionCheck();
String arrange = sidb.getSearhItem().get(num).getFormevent().getArrangeBy();
ArrayList<SiteData> ls = wb.searchWebSite(searchField, searchCat, defect, region, arrange);
for (int j = 0; j < ls.size(); j++) {
db.addSiteData(ls.get(j));
}
}
}
});
tn.start();
try {
tn.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Как правильно это сделать?
Спасибо!