|
Создание потоков из 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 |
|
|
start [/forum/topic.php?fid=59&msg=39699706&tid=2121796]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
59ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
others: | 10ms |
total: | 165ms |
0 / 0 |