![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
headzero |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 265 Регистрация: 14.11.2006 Репутация: нет Всего: 1 |
Моя задача следующая: требуется реализовать пул потоков, причем каждый из потоков, который бежит будет добавлять новые таски на исполнение в очередь. В среднем потоки живут 5-10 секунд и добавляют новых 10- 20 тасков. Как мне это реализовать?
Я думал так сделать(схематично пример):
Будет ли так работать? Я правильно понимаю что я могу просто вызавать execute, при этом задачи будут автоматически добавлены в очередь и пойдут в работу, когда один из 10 потоков освободиться? И если не правильно, тот как лучше сделать? А что с очередью? Можно ли как то ограничить ее размер или приостановить работу, если она достигла опреедленного значения? А то потоков много каждый живет мало, но добавляет много новых задач, поэтому очередь быстро вырастит до невообразимых размеров. Спасибо. p.s начал поглядывать в сторону ThreadPoolExecutor, но не могу разобраться с параметрами . Вот из документации:
Поясните пожалуста. Это сообщение отредактировал(а) headzero - 19.9.2009, 18:48 -------------------- Воображение важнее знания (Алберт Эйнштейн) |
||||
|
|||||
Galaran |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 91 Регистрация: 25.5.2009 Репутация: 1 Всего: 2 |
правильно. метод execute() thread-safe.
нашёл вот это http://www.javamex.com/tutorials/threads/t...ls_queues.shtml |
|||
|
||||
headzero |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 265 Регистрация: 14.11.2006 Репутация: нет Всего: 1 |
спасибо, Galaran
почитал, как раз то что нужно Но вот еще вопрос, может кто подскажет: я сделал все работает нормально. но вот следующая проблема, очередь набираеться быстро,так как в очередь кладется новый обект
и через 5 минут размер програмы растет до 100 M как же мне сделать что бы контролировать размер очереди? в принципе если каждое запущеное задание дает еще 10-20 новых, то рост неизбежен, я вижу решение только в сериализации, когда новые задачи можно сохранить на диск, а потом подтягивать. рост неизбежен все равно, но на диске больше места все таки чем в выделеной памяти. Добавлено через 6 минут и 45 секунд в целом это приложение типа многопоточного поискового робота: каждая задача получает ссылку, скачавает страницу,парсит ее, вытягивая ссылки, затем создает столько задач сколько и ссылок, т.е схематично так:
Есть еще вариант сохранять только ссылки, а затем запускать задачи в другой части кода - при этом сами линки буду занимать намного меньше памяти, чем обьекты. Пока не зная что делать. Если кто знает подскажите как сделать. -------------------- Воображение важнее знания (Алберт Эйнштейн) |
||||
|
|||||
COVD |
|
||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 17 Всего: 43 |
Значит вам нужна очередь, поддерживающая persistence. Например, http://activemq.apache.org/amq-message-store.html.
Конечно. |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |