![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| CSharpProgrammer |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 6.7.2006 Репутация: нет Всего: нет |
Доброго времени суток.
Возникла задача, есть класс содержащий метод который выполняет проверку. Данные проверки берутся из таблицы в бд (запись в таблице). Необходимо многопоточно выполнять проверку, так чтобы каждый поток брал свою запись из базы последовательно. Как бы это реализовать используя возможности 5 версии Java (т.е. используя настраиваемый пулл потоков) и какой-нибудь embedded базы (без запуска сервера) может быть используя lucene.. С Потоками еще не работал, поэтому хотелось бы детальный пример. |
|||
|
||||
| Stolzen |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1041 Регистрация: 17.10.2005 Репутация: 23 Всего: 48 |
Используйте ThreadPool. Пример:
Вывод:
Из вывода видно, что каждый поток взял себе именно тот ресурс, который ему был предназначен |
||||
|
|||||
| Старовъръ |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 491 Регистрация: 8.5.2008 Репутация: 4 Всего: 10 |
Если расскажешь зачем тебе это нужно, возможно найдется у кого-то совет как преобразовать твой алгоритм во что-то более эффективное. -------------------- |
|||
|
||||
| CSharpProgrammer |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 6.7.2006 Репутация: нет Всего: нет |
Stolzen спасибо за код, это как раз то что мне нужно! Тогда у меня еще один вопрос если я делаю так
то у меня вылетает
можно как-то сделать, чтобы пока какой-то поток из пула не закончил свою работу, другие потоки не создавались? Старовъръ, Задача в следующем заключается: в таблице есть записи вида 1) адрес сайта, 2) ссылка, 3) дата последней проверки Необходимо проверить наличие ссылки на сайте если дата последней проверки больше чем пол года. И все это должно делаться многопоточно. |
||||
|
|||||
| Старовъръ |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 491 Регистрация: 8.5.2008 Репутация: 4 Всего: 10 |
Тогда зачем читать последовательно? Выгребаешь каждый раз по 100 записей, выстраиваешь в очередь и отдаешь на растерзание потокам (по схеме, которую описал Stolzen). Затем обратно записываешь те же 100 и повторяешь процедуру наново. Так производительность будет намного выше, нежели при последовательном чтении по одной записи.
-------------------- |
|||
|
||||
| CSharpProgrammer |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 6.7.2006 Репутация: нет Всего: нет |
Спасибо, я понял уже что этот вариант правильный, но как сделать все таки так
чтобы не вылетало java.lang.OutOfMemoryError: Java heap space ? |
||||
|
|||||
| Stolzen |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1041 Регистрация: 17.10.2005 Репутация: 23 Всего: 48 |
10 млн тредов уж очень много памяти сожрут - тут уж как не увеличивай доступную для jvm память, ошибка все равно будет. В вашем случае можно попробовать использовать ThreadPoolExecutor + кастомный ThreadFactory. |
|||
|
||||
| CSharpProgrammer |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 6.7.2006 Репутация: нет Всего: нет |
Спасибо, буду разбираться! |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |