|
|
|
Создание потоков из Timer
|
|||
|---|---|---|---|
|
#18+
Добрый день! Собственно сабж: есть список пользователей (List<Long>) в который при логине вносится ID. В отдельном потоке через определенный интервал времени просматривается этот список и инициируется событие (update row) для каждого ID. Планирую использовать java.util.Timer и java.util.TimerTask. И через определенный интервал создавать в цикле отдельные потоки для апдейта для каждого ID'шника. Подскажите, какие могут возникнуть проблемы при создании потоков из потока ))). Нужно ли будет контролировать количество созданных потоков. По идее апдейт будет не ресурсоемким, но может быть продолжительным. Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2018, 14:22 |
|
||
|
Создание потоков из Timer
|
|||
|---|---|---|---|
|
#18+
qi_ip, nastya перелогинься ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2018, 14:46 |
|
||
|
Создание потоков из Timer
|
|||
|---|---|---|---|
|
#18+
Сам ты nastya ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2018, 14:57 |
|
||
|
Создание потоков из Timer
|
|||
|---|---|---|---|
|
#18+
qi_ipСам ты nastya Ну нельзя же спрашивать про то какие могут быть проблемы у Hello world. Это ведь простая залача на 10 мин. Бери, делай, а потом вопросы....через 10 мин. ... Потоки контроллируй и потом расскажешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2018, 15:29 |
|
||
|
Создание потоков из Timer
|
|||
|---|---|---|---|
|
#18+
Бесконтрольно плодить потоки конечно не стоит, поэтому лучше будет использовать ThreadPoolExecutor, например. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2018, 16:21 |
|
||
|
Создание потоков из Timer
|
|||
|---|---|---|---|
|
#18+
Очень похоже на наивную попытку сделать свой async-call. Убежден что задача автора решается по другому. Если это конечно не лаба где препод хочет чистые потоки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2018, 16:27 |
|
||
|
Создание потоков из Timer
|
|||
|---|---|---|---|
|
#18+
qi_ipИ через определенный интервал создавать в цикле отдельные потоки для апдейта для каждого ID'шника. ... По идее апдейт будет не ресурсоемким, но может быть продолжительным. ты так весь пул подключений к БД забьешь. Такие операции лучше делать с помощь batchUpdate сторого в одном потоке. + имхо лучше не городить свои потоки, а использовать SpringScheduler (fxiedDelay) там хоть второй раз таска не запустится, если первый будет выполняться дольше чем delay ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2018, 16:30 |
|
||
|
Создание потоков из Timer
|
|||
|---|---|---|---|
|
#18+
qi_ip, В зависимости от того на сколько критичен определенный интервал времени, лучше использовать ScheduledExecutorService или Quartz ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2018, 16:44 |
|
||
|
Создание потоков из Timer
|
|||
|---|---|---|---|
|
#18+
это ноги растут от сюда 21667055 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2018, 16:50 |
|
||
|
Создание потоков из Timer
|
|||
|---|---|---|---|
|
#18+
вадяэто ноги растут от сюда 21667055 ну. Свой список сессий делает. Пусть делает. Какая тут оптимизация если ничего нет? Почему прерывание апдейт может быть долгим, если можно в очередь поставить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2018, 16:57 |
|
||
|
Создание потоков из Timer
|
|||
|---|---|---|---|
|
#18+
По сабжу, таймер может порождать фоновый поток, может работать в том же, а может ставить в очередь заданий и тогда фоновый не нужен. Все три варианта рабочие. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2018, 17:01 |
|
||
|
Создание потоков из Timer
|
|||
|---|---|---|---|
|
#18+
Вот код, который набросал (пинать не сильно, раньше особо с потоками не работал) Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. Суть в чем: для каждого пользователя из usersList создается поток, который селектит одну строку по данному пользователю и апдейтит данные в ней. На этом задача заканчивается. Пока не знаю, как лучше контролировать, чтобы в каждый момент времени создавался только один поток для одного пользователя: как вариант, создавать в памяти список, где хранить на время работы потока его имя, а потом удалять. Если поток активный (все еще проадпдейтится запись) для пользователя с user_id=1, то при попытке создания нового потока для него же, пропускать до следующего цикла. В коде поставил Thread.currentThread().interrupt(); для принудительного "кила" потока - не факт что правильно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2018, 14:58 |
|
||
|
Создание потоков из Timer
|
|||
|---|---|---|---|
|
#18+
вадяэто ноги растут от сюда 21667055 Нее, там другая задача ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2018, 14:59 |
|
||
|
Создание потоков из Timer
|
|||
|---|---|---|---|
|
#18+
qi_ipВот код, который набросал Под Java 1.4 пишешь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2018, 15:07 |
|
||
|
Создание потоков из Timer
|
|||
|---|---|---|---|
|
#18+
Blazkowicz,нет, 7, просто, какие примеры нагуглил ))) так и написал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2018, 15:11 |
|
||
|
Создание потоков из Timer
|
|||
|---|---|---|---|
|
#18+
qi_ip, Зачем тебе потоки, да ещё на select? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2018, 15:19 |
|
||
|
Создание потоков из Timer
|
|||
|---|---|---|---|
|
#18+
qi_ipПока не знаю, как лучше контролировать, чтобы в каждый момент времени создавался только один поток для одного пользователя:один на всех и цикл ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2018, 15:20 |
|
||
|
Создание потоков из Timer
|
|||
|---|---|---|---|
|
#18+
Petro123qi_ip, Зачем тебе потоки, да ещё на select? Чтобы в определенный момент времени можно было апдейтить записи по каждому пользователю, который появляется в списке. Там идет сначала select и потом update. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2018, 15:22 |
|
||
|
Создание потоков из Timer
|
|||
|---|---|---|---|
|
#18+
Непонятно. Я не увидел в топике никаких оснований для мультипоточности. Есть сеансовые потоки. В их рамках можно сделать все. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2018, 15:24 |
|
||
|
Создание потоков из Timer
|
|||
|---|---|---|---|
|
#18+
Timer, TimerTask, new Thread - не нужены. Есть ScheduledExcutorService Цикл не нужен. Есть стрим. Анонимный класс не нужен. Есть лямды. Thread.interrupt() не нужен в принципе. Единственное для чего я не знаю нормального современного решения это try catch который в подобных задачах таки нужно писать явно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2018, 15:24 |
|
||
|
Создание потоков из Timer
|
|||
|---|---|---|---|
|
#18+
Petro123qi_ipПока не знаю, как лучше контролировать, чтобы в каждый момент времени создавался только один поток для одного пользователя:один на всех и цикл ИМХО, не совсем подходит. Если еще дальше углубиться, то суть в чем: что в базе периодически появляются новые записи, например, со статусом 0 для апдейта на статус 1 для любого пользователя. В списке userlist хранятся онлайн пользователи (это при работе с вебсокетом). Соответственно, они "входят и выходят". И для тех, которые онлайн нужно проапдейтить новые записи максимально быстро. Поэтому решил, что с потоками будет быстрее. Так как если список будет слишком большой, последний пользователь из списка будет долго ждать, когда до него дойдет очередь. А с потоками получается так, что крутится какой-то процесс, который периодически смотрит этот список и создает отдельные микрозадачи каждые в своем потоке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2018, 15:30 |
|
||
|
Создание потоков из Timer
|
|||
|---|---|---|---|
|
#18+
qi_ipИ для тех, которые онлайн нужно проапдейтить новые записи максимально быстро. Поэтому решил, что с потоками будет быстрее. Не факт что будет быстрее. Пула потоков нет. Обновить несколько записей БД одним запросом на много быстрее чем сделать тоже самое из кучи конкурирующих запросов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2018, 15:38 |
|
||
|
Создание потоков из Timer
|
|||
|---|---|---|---|
|
#18+
qi_ip, Не надо потоков. И бд тоже зачем? В оперативке же список юзверей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2018, 15:45 |
|
||
|
Создание потоков из Timer
|
|||
|---|---|---|---|
|
#18+
qi_ipсоздает отдельные микрозадачи каждые в своем потоке.хотя бы время озвучил микрозадачи и задержку таймера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2018, 15:48 |
|
||
|
Создание потоков из Timer
|
|||
|---|---|---|---|
|
#18+
Blazkowiczqi_ipИ для тех, которые онлайн нужно проапдейтить новые записи максимально быстро. Поэтому решил, что с потоками будет быстрее. Не факт что будет быстрее. Пула потоков нет. Обновить несколько записей БД одним запросом на много быстрее чем сделать тоже самое из кучи конкурирующих запросов. Нюанс в том, что я не могу это объединить в общий запрос для апдейта, так как по каждой записи, которую сделал select по сокету каждому пользователю отправляю сообщение. С пулом потоков будет быстрее? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2018, 15:48 |
|
||
|
Создание потоков из Timer
|
|||
|---|---|---|---|
|
#18+
Petro123qi_ipсоздает отдельные микрозадачи каждые в своем потоке.хотя бы время озвучил микрозадачи и задержку таймера. Сложно сказать, так как пока в режиме теста (подбор возможных вариантов). По сути, задержка таймера по минимуму. Время на микрозадачу: селект записи по userId, считывание данных строки в переменную, отправка по вебсокету этих данных, апдейт статуса строки - конец задачи. Сколько займет времени пока не замерял - нужно чем быстрее, тем лучше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2018, 15:54 |
|
||
|
Создание потоков из Timer
|
|||
|---|---|---|---|
|
#18+
qi_ip, Если врубить второй кэш в хибере, то и в базу не надо лезть). ... Преждевременная оптимизация называется. Тесты нужны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2018, 16:05 |
|
||
|
Создание потоков из Timer
|
|||
|---|---|---|---|
|
#18+
Petro123qi_ip, Если врубить второй кэш в хибере, то и в базу не надо лезть). ... Преждевременная оптимизация называется. Тесты нужны. К сожалению, хибер тут не используется ((( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2018, 16:14 |
|
||
|
Создание потоков из Timer
|
|||
|---|---|---|---|
|
#18+
qi_ipНюанс в том, что я не могу это объединить в общий запрос для апдейта, так как по каждой записи, которую сделал select по сокету каждому пользователю отправляю сообщение. С пулом потоков будет быстрее? И что, транзакции висят пока сообщение не будет отправлено? Только потом комитяться? Это же пипец базе, залочится всё нахрен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2018, 16:29 |
|
||
|
Создание потоков из Timer
|
|||
|---|---|---|---|
|
#18+
BlazkowiczИ что, транзакции висят пока сообщение не будет отправлено? +1 Аффтар! Решение без коммита: При новой сессии отпраляем все что спросит. При каждой отправке пишем в оперативку тайштамп время последней отправки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2018, 16:45 |
|
||
|
Создание потоков из Timer
|
|||
|---|---|---|---|
|
#18+
Blazkowiczqi_ipНюанс в том, что я не могу это объединить в общий запрос для апдейта, так как по каждой записи, которую сделал select по сокету каждому пользователю отправляю сообщение. С пулом потоков будет быстрее? И что, транзакции висят пока сообщение не будет отправлено? Только потом комитяться? Это же пипец базе, залочится всё нахрен. Делаю селект, отправляю сообщение с данными из селекта, делаю апдейт. При селекте, разве база лочится? Petro123BlazkowiczИ что, транзакции висят пока сообщение не будет отправлено? +1 Аффтар! Решение без коммита: При новой сессии отпраляем все что спросит. При каждой отправке пишем в оперативку тайштамп время последней отправки. И потом общий апдейт? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2018, 17:19 |
|
||
|
Создание потоков из Timer
|
|||
|---|---|---|---|
|
#18+
qi_ipДелаю селект, отправляю сообщение с данными из селекта, делаю апдейт. При селекте, разве база лочится? Тогда всё ещё не понятно почему нужно делать апдейты в отдельных потоках? Получили список ID. Сделали по нему выборку. Отправили всем сообщения. Потом батч-апдейтом накатили всем то кого пришло подтверждение. Вы изобретаете потоки там где они не нужны. Потоки вам по факту нужны только чтобы отправлять сообщения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2018, 17:55 |
|
||
|
Создание потоков из Timer
|
|||
|---|---|---|---|
|
#18+
qi_ipИ потом общий апдейт?о чем? Незачем сохранять в базу вообще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2018, 18:27 |
|
||
|
Создание потоков из Timer
|
|||
|---|---|---|---|
|
#18+
qi_ipPetro123пропущено... хотя бы время озвучил микрозадачи и задержку таймера. Сложно сказать, так как пока в режиме теста (подбор возможных вариантов). По сути, задержка таймера по минимуму. Время на микрозадачу: селект записи по userId, считывание данных строки в переменную, отправка по вебсокету этих данных, апдейт статуса строки - конец задачи. Сколько займет времени пока не замерял - нужно чем быстрее, тем лучше. Дружище. Я читаю уже много постов и не пойму какая решается задача. Классическая работа с бд в режиме OLTP не требует каких то фоновых потоков и ухищрений. Либо у тебя в бд уже есть проблема и ее надо решать в бд. Плодить потоки можно в java бесконечно много но это не помогает работе БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2018, 18:58 |
|
||
|
Создание потоков из Timer
|
|||
|---|---|---|---|
|
#18+
BlazkowiczТогда всё ещё не понятно почему нужно делать апдейты в отдельных потоках? Получили список ID. Сделали по нему выборку. Отправили всем сообщения. Потом батч-апдейтом накатили всем то кого пришло подтверждение. Вы изобретаете потоки там где они не нужны. Потоки вам по факту нужны только чтобы отправлять сообщения. Понятно, согласен, что для апдейтить в потоке может быть не правильно, единственный нюанс который я вижу, что апдейты будут не успевать за отправками сообщениями, но тут чисто ИМХО, так как еще не протестировал. Petro123qi_ipИ потом общий апдейт?о чем? Незачем сохранять в базу вообще. Мне нужно проапдейтить запись, для кого было отправлено сообщение. maytonДружище. Я читаю уже много постов и не пойму какая решается задача. Классическая работа с бд в режиме OLTP не требует каких то фоновых потоков и ухищрений. Либо у тебя в бд уже есть проблема и ее надо решать в бд. Плодить потоки можно в java бесконечно много но это не помогает работе БД.. Потоки появились из-за необходимости через вебсокет отправлять сообщения определенным пользователям с максимальной скоростью доставки, а апдейтить, как уже написал Blazkowicz можно не в потоке, а батч-апдейтом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2018, 09:36 |
|
||
|
Создание потоков из Timer
|
|||
|---|---|---|---|
|
#18+
qi_ipМне нужно проапдейтить запись, для кого было отправлено сообщение.десять раз спросить? Зачем это нужно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2018, 09:51 |
|
||
|
Создание потоков из Timer
|
|||
|---|---|---|---|
|
#18+
Petro123qi_ipМне нужно проапдейтить запись, для кого было отправлено сообщение.десять раз спросить? Зачем это нужно? Пометить что для данного пользователя определенный текст был отправлен и не отправлять в следующий раз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2018, 09:53 |
|
||
|
Создание потоков из Timer
|
|||
|---|---|---|---|
|
#18+
qi_ip, Я же привел вариант. При старте сессии ты отправляешь клиенту все мессаги что попросит. Он же их не хранит у себя. А потом хранишь не в базе а в оперативке. Вариант? Тогда апдейт не нужен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2018, 10:00 |
|
||
|
Создание потоков из Timer
|
|||
|---|---|---|---|
|
#18+
qi_ip, Помечают в базе когда БЛ в базе. Например, хранимка JOB. У тебя БЛ не в базе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2018, 10:02 |
|
||
|
Создание потоков из Timer
|
|||
|---|---|---|---|
|
#18+
Petro123qi_ip, Я же привел вариант. При старте сессии ты отправляешь клиенту все мессаги что попросит. Он же их не хранит у себя. А потом хранишь не в базе а в оперативке. Вариант? Тогда апдейт не нужен. Согласен, вариант, но тогда в моем случае, если не будет помечено, что данному пользователю конкретное сообщение было послано, после потенциальной перезагрузке сервера все сообщения опять заново полетят, что не нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2018, 10:07 |
|
||
|
Создание потоков из Timer
|
|||
|---|---|---|---|
|
#18+
qi_ip, Нет))). Будет опять реконнект и новая сессия. Короче, делай потоки хоть на select. Аргументы кончились. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2018, 10:11 |
|
||
|
Создание потоков из Timer
|
|||
|---|---|---|---|
|
#18+
qi_ipПотоки появились из-за необходимости через вебсокет отправлять сообщения определенным пользователям с максимальной скоростью доставки, а апдейтить, как уже написал Blazkowicz можно не в потоке, а батч-апдейтом.тонким местом будет перебор листа с пользователями кому надо отправлять. qi_ipкак уже написал Blazkowicz можно не в потоке, а батч-апдейтом.это да, но только пока ты заполняешь этот батч, а как заполнишь - будешь ждать пока он выполнится.... вот тут их можно разнести на потоки 2батча - 2 потока. но вопрос а субд справится? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2018, 10:14 |
|
||
|
|

start [/forum/topic.php?all=1&fid=59&tid=2121796]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
48ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
| others: | 9ms |
| total: | 161ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...