![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
я посмотрел аналогичный код со 100 тредами:
Ничего плохого нe происходит - изнача льно есть 8 тредоv JVM, 1 main тред, затем их число растет до 109, и череz секунду падает дo 9. Так что проблема в чем-тo другом. Например, у тебя все синхронизировано нa листe. Если какой-тo другой тред (не тот для которогo тy постил коd) "смотрит" лист в синхронизированном блокe и достаточо часто, тo возможно что он тем самым блокирует доступ к листу другим треда, и они ждут момента kогда смогут себя удалить. Может, еще чт о. А зачем вообще тебе лист? -------------------- |
|||
|
||||
| Sleepy_PIP |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 512 Регистрация: 30.6.2004 Где: Moscow Репутация: 4 Всего: 12 |
да, подобные примеры я то-ж гонял, пытаясь понять. может и правда дело в другом, но уже все излазил вдоль и поперек. Самое интересное что колл-во тхреадов все-ж падает изредка до расчетного ...
Зачем листы? - я с их помощъю контролю тхреды и просто банально собираю статистику по коллв-у тхреадов. А как еще узнать сколько все собственных тхреадов в _данный_ момент? - оно-ж плавает здорово ... на гдоб. переменных все делать?. но тогда я не смогу обращаться к классным переменным конкр. тхреада ... -------------------- -- Sleepy_PIP. Pavel Pryazhentsev (ex. 2:5020/141) "... Лучше быть нужным, чем свободным ..." |
|||
|
||||
| Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
http://java.sun.com/j2se/1.4.2/docs/api/ja...hreadGroup.html Создай свой ThreadGroup, и добавляй в него треды, указывая ThreadGroup в конструкторе: http://java.sun.com/j2se/1.4.2/docs/api/ja....lang.Runnable) Тогда узнать количество тредов можно через activeCount(): http://java.sun.com/j2se/1.4.2/docs/api/ja...l#activeCount() -------------------- |
|||
|
||||
| igon |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 327 Регистрация: 30.10.2004 Репутация: 1 Всего: 21 |
Идея такая (возможно, бесполезная - на практике не проверял):
Так как причина проблемы, тебя беспокоящей, в наличии неубранных из листов "мертвых" ссылок, хранить в листах не ссылки, а ИМЕНА тредов! 1.Каждый тред обзывешь уникально (setName("Имя")), имя фиксируешь в листе 2.Если нужно обратиться к какому-нибудь треду, с помощью метода enumerate(Thread[] tarray) получаешь массив активных тредов и перебором (tarray[i].getName() = "Имя") ищешь тред с нужным именем и - обращаешься. 3.По окончании работы работы тред чистит свое имя в листе и умирает - ИМХО, без фантомов Возможные осложнения: метод enumerate - static, возвращает "...every active thread in the current thread's thread group and its subgroups...". Что он вернет при вызове в виде Thread.enumerate(tarray) из, допустим, обработчика событий и какой тред будет при этом считаться current - совершенно не представляю, надо пробовать. И, btw, действительно ли необходимо устанавливать и рвать connection к БД в каждом треде? Через один постоянный connection в БД можно спокойно закачать то, что "нароет" целая куча ftp тредов -------------------- Хотите поговорить об этом? |
|||
|
||||
| Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
Вообще-то идея "регистрации" тредов не совсем правильная в данном контексте. Треды ведь все одинаковы? КАждый тред самодостаточен ? Обеспечиваем взаимодействие через synchronized (notify, wait) и всего делов. Зачем же их искусственно "метить" ?
-------------------- |
|||
|
||||
| igon |
|
||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 327 Регистрация: 30.10.2004 Репутация: 1 Всего: 21 |
В контексте простого подсчета активных - да! Но ведь нужно
(btw, в классных переменных=переменных класса=static переменных нельзя хранить особенности состояния конкретного треда - они общие для всех instance класса) В случае
и "долгоживущих" тредов как мне узнать, сколько, скажем, информации "накачал" тред, созданный в 54 итерации, не используя сохраненные ссылки на него? Да и в GUI для мониторинга произвольных тредов лучше показывать их имена, а не адреса Еще раз подчеркну - идея далеко не бесспорна и действительно зависит от решаемых задач, но
-------------------- Хотите поговорить об этом? |
||||||||
|
|||||||||
| Domestic Cat |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
глобальных переменных вообще не существует (в Java), р5аз уж на то пошло, статические переменные и есть в некором смысле глобальные.
раз все треды равны, то какая хрен разница какой тред что скачал, и вообще какое у треда имя. -------------------- |
||||
|
|||||
| Sleepy_PIP |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 512 Регистрация: 30.6.2004 Где: Moscow Репутация: 4 Всего: 12 |
при чем здесь стат. переменные.??? Я храню в классе тхреада не несколько переменных - они специфичны для каждого экземпляра класса. и они мне нужны!. По поводу именования - они (тхреады) и так автоматом именуются уникально, но хранить имена - мало. нужен доступ до переменных. -------------------- -- Sleepy_PIP. Pavel Pryazhentsev (ex. 2:5020/141) "... Лучше быть нужным, чем свободным ..." |
||||||
|
|||||||
| Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
а можно узнат', что это зa переменныe? -------------------- |
|||
|
||||
| Sleepy_PIP |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 512 Регистрация: 30.6.2004 Где: Moscow Репутация: 4 Всего: 12 |
public class GetListThr extends Thread { public static final long SQLockConflict=335544345; public static final long SQLDeadLockConflict=335544336; public boolean StartMake=false; private PIPFTPSite ftps; private byte conncount=0; public int TryCount; public PIPLog llog=PIPFTPSGetList.Gconf.llog; public DBWork dbw=PIPFTPSGetList.Gconf.dbw; public DBConnItem dbc; public boolean notConnected; private PreparedStatement ub; private PreparedStatement ubl; public FTPClient lftp; private long CountDirList=0; .... я в чем-то ошибаюсь? где-то не правильно в корне? -------------------- -- Sleepy_PIP. Pavel Pryazhentsev (ex. 2:5020/141) "... Лучше быть нужным, чем свободным ..." |
||||
|
|||||
| Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
Есть переменные, которые только треду нужны, а я имею в виду - значния каких полей тебе нужно "извне" смотреть :
То есть, зачем тебе нужен доступ к переменным? И к каким (только объяс)ни что они значат, по названиям можо толькo догадываться. И еwe раз прошу : пользуйся тегами [cоde=java] [/cоde]. -------------------- |
|||
|
||||
| Sleepy_PIP |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 512 Регистрация: 30.6.2004 Где: Moscow Репутация: 4 Всего: 12 |
-------------------- -- Sleepy_PIP. Pavel Pryazhentsev (ex. 2:5020/141) "... Лучше быть нужным, чем свободным ..." |
||||||
|
|||||||
| Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
Все это можно делать, но в обратном направлении: например ты спрашиваешь тред извне сколько было попыток коннекта. Но можно передавать тредам ссылку на объект, который заведует статистикой, так чтобы треды сами сообщали ему нужые данные.
Добавлено @ 18:54 ПС: спасибо за использование подсветки -------------------- |
|||
|
||||
| Sleepy_PIP |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 512 Регистрация: 30.6.2004 Где: Moscow Репутация: 4 Всего: 12 |
понял, понял. я это уже продумывал, но решил что так - банально писать меньше
Добавлено @ 19:13
вообще что-то не так происходит у меня. - это я опять про листы и тхреады ... сделал контр. пример без листов (приводить не буду - много и муторно), но делающий то-ж самое - так колл-во тхреадов по тасклисту - почти соответствует расчетному и быстро отражает суть жизни тхреадов ... что-то я не понимаю. где-то переколдовал видать -------------------- -- Sleepy_PIP. Pavel Pryazhentsev (ex. 2:5020/141) "... Лучше быть нужным, чем свободным ..." |
|||
|
||||
| Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
ну тогдa ищи проблему с листом, почему гц запаздывает со сборкой. Может, где-то еще ты хранишь ссылки на треды
-------------------- |
|||
|
||||
![]()
|
| Правила форума "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. |