![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
Samotnik |
|
||||
![]() Super star ! ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 7192 Регистрация: 4.11.2006 Где: Минск City Репутация: 5 Всего: 191 |
Привет.
Ситуация такая: Есть спринг бин ProxyKeeper, содержит в себе два поля: IP, port. Этот бин используется для реализации прокси сервера, а точнее, он в себе содержит адреса нескольких прокси серверов(в данном случае пять), которые должны последовательно меняться, если один перестает работать.
Логика метода, который это все обрабатывает обсолютно не сложная. С помощью библиотеки htmlcleaner загружается URL, и достается все html содержимое.:
Вопрос вот в чем, этот метод могут использовать одновременно от одного до пятнадцати других методов, как одновременно, так и нет. Вопрос: будет ли этот метод корректно отрабатывать каждый раз? Особенно интересует переменная activeProxy, будет ли она меняться всегда, как этого требует алгоритм, или для каждого метода вызывающего этот метод, она будет своя? Это сообщение отредактировал(а) Samotnik - 10.1.2012, 14:12 |
||||
|
|||||
Stolzen |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1041 Регистрация: 17.10.2005 Репутация: 3 Всего: 48 |
Будет ли она меняться зависит от proxyKeeper, в этом ведь методе она после присвоения больше не изменяется. Попробуйте ее выставить в final. Что имеется ввиду под "она будет своя"? Для каждого вызова в стеке будет своя переменная, доступ к которой будет возможен только из этого метода - поэтому одновременное использование переменной из разных потоков невозможно в принципе. |
|||
|
||||
MisterCleric |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1043 Регистрация: 16.2.2006 Где: Харьков, Украина Репутация: 33 Всего: 38 |
Привет.
У тебя в многопоточной среде может возникнуть проблема вот здесь:
Надо в ProxyKeeper использовать ReadWriteLock на проперти activeProxy:
Это сообщение отредактировал(а) MisterCleric - 10.1.2012, 15:12 -------------------- ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ... |
||||
|
|||||
Samotnik |
|
|||
![]() Super star ! ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 7192 Регистрация: 4.11.2006 Где: Минск City Репутация: 5 Всего: 191 |
Stolzen, MisterCleric, почему переменные final ? Мне как раз-таки наоборот нужно изменять их значения.
Т.е.: метод берет первые ip, port. пытается отработать, не получается, выскакивает IOException, в catch я я беру следующую пару ip, port. И так должно быть до бесконечности по кругу. Меня интересует, если метод установил, что активный порперти, например третий, будет ли другой метод, который тоже паралельно работает с этим же методом, поринформирован, что нужно использовать третью пару? |
|||
|
||||
Stolzen |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1041 Регистрация: 17.10.2005 Репутация: 3 Всего: 48 |
Если нужно менять значения, то это уже означает, что потенциально код потоконебезопастный. Тогда сделайте
В цикле, после while Добавлено через 6 минут и 57 секунд А вообще архитектурно следовало бы использовать другой подход. Можно выделить класс, который будет знать, какой прокси сейчас активен, и в loadUrl использовать его - сейчас loadUrl делает слишком много действий. |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |