|
Запуск потоков в конструкторе класса
|
|||
---|---|---|---|
#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.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2019, 10:08 |
|
Запуск потоков в конструкторе класса
|
|||
---|---|---|---|
#18+
Я-бы рассмотрел ситуацию когда внутри потока (конструктора) бросается RuntimeException и мы выпадаем из конструктора. При этом объект как будто-бы не создан. Тоесть у нас нет данных для анализа. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2019, 10:21 |
|
Запуск потоков в конструкторе класса
|
|||
---|---|---|---|
#18+
Molasarпотоки в конструкторе класса-1 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2019, 10:30 |
|
Запуск потоков в конструкторе класса
|
|||
---|---|---|---|
#18+
Molasar, а если не нужно запускать тред сразу, а потом? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2019, 10:34 |
|
Запуск потоков в конструкторе класса
|
|||
---|---|---|---|
#18+
http://www.javapractices.com/topic/TopicAction.do?Id=254 There's nothing wrong with creating a thread object in a constructor or static initializer - just don't start it there. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2019, 10:42 |
|
Запуск потоков в конструкторе класса
|
|||
---|---|---|---|
#18+
TsyklopMolasar, а если не нужно запускать тред сразу, а потом? Как раз и нужно запустить поток один раз и сразу. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2019, 10:47 |
|
Запуск потоков в конструкторе класса
|
|||
---|---|---|---|
#18+
MolasarTsyklopMolasar, а если не нужно запускать тред сразу, а потом? Как раз и нужно запустить поток один раз и сразу.выше уровнем код покажи. Наверно и там можно "один раз и сразу" ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2019, 10:49 |
|
Запуск потоков в конструкторе класса
|
|||
---|---|---|---|
#18+
Понял. Всем спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2019, 10:50 |
|
Запуск потоков в конструкторе класса
|
|||
---|---|---|---|
#18+
Лучше не стоит. Ни создавать ни стартовать. И вообще лучше переходить к многопточном коду только после прочтения хотя бы Java Concurrency in Practice, а еще лучше JCIP + Art of Multiprocessor programming ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2019, 12:35 |
|
Запуск потоков в конструкторе класса
|
|||
---|---|---|---|
#18+
Molasar, вас не смущает , что size() - не потокобезопасная операция и может exception вывалиться? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2019, 14:58 |
|
Запуск потоков в конструкторе класса
|
|||
---|---|---|---|
#18+
ОзверинMolasar, вас не смущает , что size() - не потокобезопасная операция и может exception вывалиться? всмысле, не exception, а некорректную цифру. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2019, 15:04 |
|
Запуск потоков в конструкторе класса
|
|||
---|---|---|---|
#18+
ОзверинMolasar, вас не смущает , что size() - не потокобезопасная операция и может exception вывалиться? Уже повалились))) Использую synchronized(Object) {...} ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2019, 09:54 |
|
Запуск потоков в конструкторе класса
|
|||
---|---|---|---|
#18+
ОзверинОзверинMolasar, вас не смущает , что size() - не потокобезопасная операция и может exception вывалиться? всмысле, не exception, а некорректную цифру. exception были проблемой. eventList.isEmpty() - потокобезопасная операция? Мне важно определить есть ли в списке элементы или нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2019, 09:58 |
|
Запуск потоков в конструкторе класса
|
|||
---|---|---|---|
#18+
MolasarОзверинпропущено... всмысле, не exception, а некорректную цифру. exception были проблемой. eventList.isEmpty() - потокобезопасная операция? Мне важно определить есть ли в списке элементы или нет. вы в итоге делаете это для того, чтобы по 1000 сообщений вставлять в БД?:) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2019, 10:12 |
|
Запуск потоков в конструкторе класса
|
|||
---|---|---|---|
#18+
MolasarОзверинпропущено... всмысле, не exception, а некорректную цифру. exception были проблемой. eventList.isEmpty() - потокобезопасная операция? Мне важно определить есть ли в списке элементы или нет. If we look inside the isEmpty() method, it also check the size of arraylist to determine if the list is empty or not. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2019, 10:13 |
|
Запуск потоков в конструкторе класса
|
|||
---|---|---|---|
#18+
Попробуй обернуть список такой оберткой Код: java 1.
Но после этого надо мерять производительность. Т.к. если ты будешь сильно часто "долбить" по такому списку из множества потоков то синхронизирующая обёртка может стать узким местом. И посмотри в API примеры как его использовать. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2019, 10:15 |
|
Запуск потоков в конструкторе класса
|
|||
---|---|---|---|
#18+
ОзверинMolasarпропущено... exception были проблемой. eventList.isEmpty() - потокобезопасная операция? Мне важно определить есть ли в списке элементы или нет. вы в итоге делаете это для того, чтобы по 1000 сообщений вставлять в БД?:) Через пул хикари получается 5к-10к сообщений в секунду. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2019, 10:22 |
|
Запуск потоков в конструкторе класса
|
|||
---|---|---|---|
#18+
ОзверинMolasarпропущено... exception были проблемой. eventList.isEmpty() - потокобезопасная операция? Мне важно определить есть ли в списке элементы или нет. вы в итоге делаете это для того, чтобы по 1000 сообщений вставлять в БД?:) В итоге вся эта связка с ActiveMQ получается очень надежной и быстрой. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2019, 10:26 |
|
Запуск потоков в конструкторе класса
|
|||
---|---|---|---|
#18+
MolasarОзверинпропущено... вы в итоге делаете это для того, чтобы по 1000 сообщений вставлять в БД?:) Через пул хикари получается 5к-10к сообщений в секунду. Пул ускоряет только операцию создания нового коннекта. Если ты решаешь задачи где требуется постояное и долго-живущее соединение (обслуживание очереди) то я-бы создал просто отдельный объект Connection навечно. При ошибках - соотв надо предусмотреть логику реконнекта. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2019, 10:28 |
|
Запуск потоков в конструкторе класса
|
|||
---|---|---|---|
#18+
maytonПопробуй обернуть список такой оберткой Код: java 1.
Но после этого надо мерять производительность. Т.к. если ты будешь сильно часто "долбить" по такому списку из множества потоков то синхронизирующая обёртка может стать узким местом. И посмотри в API примеры как его использовать. А Queue быстрее List будет или нет при частом добавлении, чтении? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2019, 10:31 |
|
Запуск потоков в конструкторе класса
|
|||
---|---|---|---|
#18+
maytonMolasarпропущено... Через пул хикари получается 5к-10к сообщений в секунду. Пул ускоряет только операцию создания нового коннекта. Если ты решаешь задачи где требуется постояное и долго-живущее соединение (обслуживание очереди) то я-бы создал просто отдельный объект Connection навечно. При ошибках - соотв надо предусмотреть логику реконнекта. Пока взял готовое решение - Хикари, чтобы использовать создаваемые им соединения в отдельных потоках. При кол-ве потоков = 2*CPU_cores + 1 получается самый производительный вариант записи в БД. Меньше или больше производительность снижается. Где-то у Oracle это прочел, на практике подтвердилось. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2019, 10:36 |
|
Запуск потоков в конструкторе класса
|
|||
---|---|---|---|
#18+
MolasarmaytonПопробуй обернуть список такой оберткой Код: java 1.
Но после этого надо мерять производительность. Т.к. если ты будешь сильно часто "долбить" по такому списку из множества потоков то синхронизирующая обёртка может стать узким местом. И посмотри в API примеры как его использовать. А Queue быстрее List будет или нет при частом добавлении, чтении? Queue будет быстрее только в особых случаях. Когда у тебя в задаче есть ярко-выраженная операция с очередями. Такая как добавить в хвост. И взять с головы . И есть 2 (и более потоков) которые это делают асинхронно и независимо. В остальных случаях Queue может быть хуже чем List. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2019, 10:43 |
|
Запуск потоков в конструкторе класса
|
|||
---|---|---|---|
#18+
Molasar, я так думаю, что самый просто и надежный вариант и при этом приемлемый по скорости - это использовать ArrayBlockingQueue и не париться. Если скорость не устроит - идти дальше. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2019, 11:07 |
|
Запуск потоков в конструкторе класса
|
|||
---|---|---|---|
#18+
maytonMolasarпропущено... А Queue быстрее List будет или нет при частом добавлении, чтении? Queue будет быстрее только в особых случаях. Когда у тебя в задаче есть ярко-выраженная операция с очередями. Такая как добавить в хвост. И взять с головы . И есть 2 (и более потоков) которые это делают асинхронно и независимо. В остальных случаях Queue может быть хуже чем List. В моём случае будет 2 потока: 1-ый добавляет элемент в хвост. 2-ой берет и удаляет элемент с головы. Озверин тоже рекомендовал использовать - ArrayBlockingQueue ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2019, 11:11 |
|
Запуск потоков в конструкторе класса
|
|||
---|---|---|---|
#18+
ОзверинMolasar, я так думаю, что самый просто и надежный вариант и при этом приемлемый по скорости - это использовать ArrayBlockingQueue и не париться. Если скорость не устроит - идти дальше. Понял. Спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2019, 11:12 |
|
|
start [/forum/topic.php?fid=59&fpage=26&tid=2121241]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
76ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
64ms |
get tp. blocked users: |
1ms |
others: | 232ms |
total: | 422ms |
0 / 0 |