У меня есть один поток, который add()
объектов в очередь LinkedList, и другой поток, который poll()
очередь для объектов для обработки.Это единственные два метода, которые я использую в своей очереди.Я никогда не перебираю очередь, не добавляю и не удаляю объекты в середине списка.Я не могу придумать сценарий, когда два потока наступают друг на друга и каким-то образом портят данные, но, возможно, мне просто не хватает воображения.
Нажатие происходит редко (несколько раз в секунду), но опрос очень част(пару тысяч раз в секунду).Интересно, сколько я получу за синхронизацию add()
и poll()
.Это работает на Android.
Редактировать: Я не ищу BlockingQueue
;Я блокирую ввод-вывод, а не объекты в очереди:
Метод run()
в потоке опрашивает блоки, ожидающие, когда пространство станет доступным в выходном буфере.Когда пространство становится доступным, он проверяет наличие объектов в очереди.Если он доступен, он сериализует его в выходной буфер.Если очередь пуста (т. Е. poll()
возвращает null
), она poll()
других очередей с более низким приоритетом и, если все они пустые, сериализует сообщение «данные недоступны сейчас».