0 голосов 1410 просмотров 22.07.2019 / 12:43
Death
Есть задача обрабатывать в отдельном потоке от главного данные.Часто делал так Открыть спойлер Закрыть спойлер цикл пока(истина){Если(есть данные в списке) То обработать данные из списка; СонПотока(60 раз в секунду) ; } Но понял, что тут нагрузка есть на проверку условий 60 раз в секунду. А данные могут пачкой в 100 объектов придти, а может один раз в 5 минут. И вопрос: как сделать грамотно это место? Мне нужно из главного потока отправить данные в отдельный поток для обработки. Не создавая поток только на один объект. Есть ли пулы потоков, в которые будут данные распределять? Чтобы во время простоя, потоки эти не нагружали процессор, а как только данные пришли, то потоки вызываю с объектом интерфейс, который я реализовал на обработку? Ответы
0 голосов уть его проста. Берется некий объект. Поток, который ждет выполнения каких-либо условий, вызывает у этого объекта метод wait, предварительно захватив его монитор. На этом его работа приостанавливается. Другой поток может вызвать на этом же самом объекте метод notify (опять же, предварительно захватив монитор объекта), в результате чего, ждущий на объекте поток "просыпается" и продолжает свое выполнение. Подчеркиваю, в обоих случаях монитор надо захватывать в явном виде, через synchronized-блок, ибо методы семейства wait/notify не синхронизированы!
И в главном потоке если есть данные, то менять значение data.value на true и вызывать thread.notify();
Распределение данных, всю эту фигню, писать ручками, синхронизировать ручками. http://skipy.ru/technics/synchronization.html 0 голосов И есть идея создать класс реализующий Runnable принимающий в конструктор данные одного объекта и в методе run сделать обработку. Так же создать singleton паттер для ExecutorService с 5 потоками Потом создавая объект обработки, передавая в конструктор данные, отправлять его на executor.submit(process) я получу обработку в отдельном потоке, при том, что нагрузка будет распределяться на 5 потоков. На сколько эта идея лучше, чем в вопросе с одним потоком и задержкой в 1000/60 миллисекунд? Какие минусы и проблемы есть и будут?
Изм. Death
от 22.07.2019 / 15:06
Screenshot_20190722-154346.jpg (20.05 кб.)
26.07.2019 / 07:55
pmtpmt
Ого, вы хакер
Всего: 3
|
Реклама |