Java: Какой объект больше подходит? - PullRequest
2 голосов
/ 19 августа 2010

Я пишу приложение, подобное паре чат-сервер-клиент.

Я планирую создать центральный объект, в котором будут храниться новые сообщения, полученные от клиентов, до тех пор, пока они не будут обработаны основным потоком.

Мое приложение многопоточное. Каждый клиент будет в своем собственном потоке, поэтому несколько потоков будут добавлять сообщения в этот центральный объект.

Основной поток проверит этот объект на наличие сообщений, удалит «самый старый» и обработает его соответствующим образом. Желательно, чтобы сообщения обрабатывались в том же порядке, в котором они были добавлены (FIFO).

Какой тип объекта наиболее подходит для хранения новых сообщений? Я посмотрел в Векторы и ArrayLists, но я запутался в аспекте синхронизации. Я никогда раньше не работал с синхронизацией или потоками.

Спасибо

Ответы [ 4 ]

5 голосов
/ 19 августа 2010

ConcurrentLinkedQueue звучит правдоподобно.

Дополнительная информация здесь: Как использовать ConcurrentLinkedQueue?

Javadoc здесь: http://download -llnw.oracle.ком / JavaSE / 1.5.0 / документы / API / Java / Util / параллельный / ConcurrentLinkedQueue.html

3 голосов
/ 19 августа 2010

Если это станет чем-то большим, чем просто игрушечный проект, вы должны изучить JMS , который решает все небольшие проблемы, о которых вы пока не знаете.

AХорошая реализация JMS - Apache ActiveMQ (не относится к MQSeries от IBM).

1 голос
/ 19 августа 2010

Хотя это и не прямой ответ (поскольку @Alison предоставил достаточно приличный ответ, если вам не нужно сохранять сообщения), всегда обращайтесь к пакету java.util.concurrent, когда вам нужны классы структуры данных или служебные классы длясправка по многопоточному кодированию: http://download -llnw.oracle.com / javase / 6 / docs / api / java / util / concurrent / package-summary.html

1 голос
/ 19 августа 2010

Вы также можете рассмотреть jgroups для этого проекта.

JGroups - это надежный инструментарий группового общения с открытым исходным кодом. Его надежный и простой в использовании. Вот базовый пример чата в том же руководстве.

...