powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Создание потоков из Timer
25 сообщений из 42, страница 1 из 2
Создание потоков из Timer
    #39699060
qi_ip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

Собственно сабж: есть список пользователей (List<Long>) в который при логине вносится ID. В отдельном потоке через определенный интервал времени просматривается этот список и инициируется событие (update row) для каждого ID.

Планирую использовать java.util.Timer и java.util.TimerTask. И через определенный интервал создавать в цикле отдельные потоки для апдейта для каждого ID'шника.

Подскажите, какие могут возникнуть проблемы при создании потоков из потока ))). Нужно ли будет контролировать количество созданных потоков. По идее апдейт будет не ресурсоемким, но может быть продолжительным.

Спасибо!
...
Рейтинг: 0 / 0
Создание потоков из Timer
    #39699082
Cheblin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qi_ip,

nastya перелогинься
...
Рейтинг: 0 / 0
Создание потоков из Timer
    #39699093
qi_ip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сам ты nastya
...
Рейтинг: 0 / 0
Создание потоков из Timer
    #39699113
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qi_ipСам ты nastya
Ну нельзя же спрашивать про то какие могут быть проблемы у Hello world.
Это ведь простая залача на 10 мин.
Бери, делай, а потом вопросы....через 10 мин.
...
Потоки контроллируй и потом расскажешь.
...
Рейтинг: 0 / 0
Создание потоков из Timer
    #39699152
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бесконтрольно плодить потоки конечно не стоит, поэтому лучше будет использовать ThreadPoolExecutor, например.
...
Рейтинг: 0 / 0
Создание потоков из Timer
    #39699160
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Очень похоже на наивную попытку сделать свой async-call.

Убежден что задача автора решается по другому. Если это конечно не лаба где препод хочет чистые потоки.
...
Рейтинг: 0 / 0
Создание потоков из Timer
    #39699162
pavel_nv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qi_ipИ через определенный интервал создавать в цикле отдельные потоки для апдейта для каждого ID'шника.
...
По идее апдейт будет не ресурсоемким, но может быть продолжительным.

ты так весь пул подключений к БД забьешь. Такие операции лучше делать с помощь batchUpdate сторого в одном потоке.
+ имхо лучше не городить свои потоки, а использовать SpringScheduler (fxiedDelay) там хоть второй раз таска не запустится, если первый будет выполняться дольше чем delay
...
Рейтинг: 0 / 0
Создание потоков из Timer
    #39699176
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qi_ip,

В зависимости от того на сколько критичен определенный интервал времени, лучше использовать ScheduledExecutorService или Quartz
...
Рейтинг: 0 / 0
Создание потоков из Timer
    #39699181
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это ноги растут от сюда 21667055
...
Рейтинг: 0 / 0
Создание потоков из Timer
    #39699184
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяэто ноги растут от сюда 21667055 ну.
Свой список сессий делает.
Пусть делает.
Какая тут оптимизация если ничего нет?
Почему прерывание апдейт может быть долгим, если можно в очередь поставить?
...
Рейтинг: 0 / 0
Создание потоков из Timer
    #39699186
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По сабжу, таймер может порождать фоновый поток, может работать в том же, а может ставить в очередь заданий и тогда фоновый не нужен.
Все три варианта рабочие.
...
Рейтинг: 0 / 0
Создание потоков из Timer
    #39699684
qi_ip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот код, который набросал (пинать не сильно, раньше особо с потоками не работал)

Код: 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.
   public static void main(String[] args){
	updaterJobAsync();
	...
	//here other logic
	...

   }

   private static void senderJobAsync() {
        Timer timer = new Timer();
        TimerTask timerTask = new TimerTask() {
            @Override
            public void run() {
                System.out.println("Task started");

		for(Long el : usersList){
		   Runnable task = new Runnable() {
                      @Override
                      public void run() {
                         try {
                            ...
                            //here logic: connect to database and update row by ID
                            ...
                         } catch (Exception ex) {
                            System.out.println("Error: " + ex);
                         }
                         Thread.currentThread().interrupt();
                       }
                    };
                   new Thread(task, "msgThreadUsr_" + k).start();
                   System.out.println("THREAD threadUsr_" + k + " CREATED");
		}
                System.out.println("Task ended");
            }
        };
        timer.schedule(timerTask, 0, 10000);
   }



Суть в чем: для каждого пользователя из usersList создается поток, который селектит одну строку по данному пользователю и апдейтит данные в ней. На этом задача заканчивается. Пока не знаю, как лучше контролировать, чтобы в каждый момент времени создавался только один поток для одного пользователя: как вариант, создавать в памяти список, где хранить на время работы потока его имя, а потом удалять.

Если поток активный (все еще проадпдейтится запись) для пользователя с user_id=1, то при попытке создания нового потока для него же, пропускать до следующего цикла.

В коде поставил Thread.currentThread().interrupt(); для принудительного "кила" потока - не факт что правильно.
...
Рейтинг: 0 / 0
Создание потоков из Timer
    #39699685
qi_ip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вадяэто ноги растут от сюда 21667055
Нее, там другая задача )))
...
Рейтинг: 0 / 0
Создание потоков из Timer
    #39699694
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qi_ipВот код, который набросал
Под Java 1.4 пишешь?
...
Рейтинг: 0 / 0
Создание потоков из Timer
    #39699700
qi_ip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,нет, 7, просто, какие примеры нагуглил ))) так и написал
...
Рейтинг: 0 / 0
Создание потоков из Timer
    #39699703
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qi_ip,
Зачем тебе потоки, да ещё на select?
...
Рейтинг: 0 / 0
Создание потоков из Timer
    #39699704
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qi_ipПока не знаю, как лучше контролировать, чтобы в каждый момент времени создавался только один поток для одного пользователя:один на всех и цикл
...
Рейтинг: 0 / 0
Создание потоков из Timer
    #39699706
qi_ip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123qi_ip,
Зачем тебе потоки, да ещё на select?
Чтобы в определенный момент времени можно было апдейтить записи по каждому пользователю, который появляется в списке.
Там идет сначала select и потом update.
...
Рейтинг: 0 / 0
Создание потоков из Timer
    #39699707
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Непонятно. Я не увидел в топике никаких оснований для мультипоточности. Есть сеансовые потоки. В их рамках можно сделать все.
...
Рейтинг: 0 / 0
Создание потоков из Timer
    #39699708
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Timer, TimerTask, new Thread - не нужены. Есть ScheduledExcutorService
Цикл не нужен. Есть стрим.
Анонимный класс не нужен. Есть лямды.
Thread.interrupt() не нужен в принципе.
Единственное для чего я не знаю нормального современного решения это try catch который в подобных задачах таки нужно писать явно.
...
Рейтинг: 0 / 0
Создание потоков из Timer
    #39699713
qi_ip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123qi_ipПока не знаю, как лучше контролировать, чтобы в каждый момент времени создавался только один поток для одного пользователя:один на всех и цикл
ИМХО, не совсем подходит.
Если еще дальше углубиться, то суть в чем: что в базе периодически появляются новые записи, например, со статусом 0 для апдейта на статус 1 для любого пользователя. В списке userlist хранятся онлайн пользователи (это при работе с вебсокетом).

Соответственно, они "входят и выходят". И для тех, которые онлайн нужно проапдейтить новые записи максимально быстро. Поэтому решил, что с потоками будет быстрее. Так как если список будет слишком большой, последний пользователь из списка будет долго ждать, когда до него дойдет очередь.
А с потоками получается так, что крутится какой-то процесс, который периодически смотрит этот список и создает отдельные микрозадачи каждые в своем потоке.
...
Рейтинг: 0 / 0
Создание потоков из Timer
    #39699719
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qi_ipИ для тех, которые онлайн нужно проапдейтить новые записи максимально быстро. Поэтому решил, что с потоками будет быстрее.
Не факт что будет быстрее. Пула потоков нет. Обновить несколько записей БД одним запросом на много быстрее чем сделать тоже самое из кучи конкурирующих запросов.
...
Рейтинг: 0 / 0
Создание потоков из Timer
    #39699728
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qi_ip,
Не надо потоков.
И бд тоже зачем?
В оперативке же список юзверей
...
Рейтинг: 0 / 0
Создание потоков из Timer
    #39699731
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qi_ipсоздает отдельные микрозадачи каждые в своем потоке.хотя бы время озвучил микрозадачи и задержку таймера.
...
Рейтинг: 0 / 0
Создание потоков из Timer
    #39699732
qi_ip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowiczqi_ipИ для тех, которые онлайн нужно проапдейтить новые записи максимально быстро. Поэтому решил, что с потоками будет быстрее.
Не факт что будет быстрее. Пула потоков нет. Обновить несколько записей БД одним запросом на много быстрее чем сделать тоже самое из кучи конкурирующих запросов.
Нюанс в том, что я не могу это объединить в общий запрос для апдейта, так как по каждой записи, которую сделал select по сокету каждому пользователю отправляю сообщение.
С пулом потоков будет быстрее?
...
Рейтинг: 0 / 0
25 сообщений из 42, страница 1 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / Создание потоков из Timer
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]