По сути, мне нужна структура данных для хранения временных сообщений чата на стороне сервера. Должно быть:
ограничено: поскольку мне не нужно хранить слишком много сообщений, клиент будет отправлять запрос на получение новых сообщений каждую секунду. Я думаю, что связанный размер должен быть максимальным. количество одновременных запросов за одну секунду. Когда буфер заполнится, старые сообщения будут удалены.
подходит для высокопараллельного доступа: я не хочу использовать структуру данных, такую как Collections.synchronizedXXXX, потому что во время итерации, если другой поток изменит структуру данных, например. добавляет сообщение, оно вызовет исключение, поэтому я должен заблокировать всю структуру данных, на самом деле мне все равно, может ли клиентский запрос получить самое последнее вставленное сообщение, потому что они отправят новый запрос через одну секунду, с другой стороны, операция записи никогда не должна откладываться. Классы в пакете java.util.concurrency кажутся решением, но...
неблокирующие: LinkedBlockingQueue, ArrayBlockingQueue они могут быть ограничены и не будут генерировать исключение во время итерации, но все они блокируют очередь. Когда очередь заполнена, я хочу добавить новый элемент в хвосты и удалить старый элемент из головы вместо того, чтобы блокировать там и ждать, пока кто-то удалит заголовок.
Итак, мой вопрос: есть ли хорошая реализация из 3-й библиотеки? Например, Google Гуава? Или, может быть, у вас есть идея получше хранить временные сообщения чата на сервере?
Большое спасибо!