Не думаю, что это проблема @ Уилмер. Я подозреваю, что само уведомление является относительно дешевым по сравнению со стоимостью использования и обработки ваших сообщений. Если вы потребляете много времени, то удаление сообщений не поможет процессу, и вам придется каким-то образом заблокировать ваш поток serv1
или разгрузить задания для запуска позже.
С точки зрения уведомлений, если никто не ждет, то notify()
фактически является запретом. Вот почему важно проверить, есть ли что-то, что нужно обработать до ожидания сигнала - все в синхронизированном блоке. Рекомендуется также зацикливаться на ожидании и проверять снова, когда мы получим уведомление. Смотрите это состояние гонки .
В общем, это очень распространенная практика, которая используется практически во всех моделях потоков производителей / потребителей , которые я видел. Альтернатива не обрабатывать изменения трафика прямоугольной формы. Либо ваш потребитель (t1) ждет слишком долго и буферы заполняются, либо он слишком много вращается и слишком много потребляет процессор, проверяя базу данных.
Еще одна вещь, которую следует учитывать, - это не использовать базу данных, а поместить объекты в BlockingQueue
для t1
для непосредственного использования. Если вам необходимо сохранить их в базе данных, поместите идентификаторы объектов в очередь для использования t1
. Потоку все равно нужно будет опрашивать базу данных при запуске, но вы сохраните опросы позже в процессе.