2016-07-27 8 views
0

Нетто-каналы (или каналы NIO в целом) FIFO? или мне нужно реализовать FIFO самостоятельно, используя порядковые номера?Являются ли netty (или java NIO) каналами FIFO?

Благодаря

+0

Что вы имеете в виду, что? –

+0

Я имею в виду, если я посылаю сообщение A, B один за другим, я получаю их на стороне заказа канала по порядку? или мне нужно проверить его вручную, чтобы убедиться. –

+0

Если вы отправляете запрос в тот же TCP-сокет, сервер получит их заказ. Было бы неплохо указать тип канала, который вы используете. –

ответ

1

НИО поддерживает чтение и блокировка записи внутри; однако они реализованы с использованием блока synchronized в NIO.

Нет НИКАКИЕ гарантии, что нить B получит блокировку после резьбы А при использовании synchronized. Вполне возможно, что Thread C может получить блокировку записи перед тем Thread В.

Смотрите следующие на БЛокИРовкИ: Synchronized release order

Если вам нужно гарантированно FIFO через несколько потоков, то вам нужно создать ReentrantLock с fair=true и требуют все ваши потоки, чтобы сначала получить этот замок.