netty通道(或一般的Java NIO通道)是FIFO吗?或者我需要自己使用序列号来实现FIFO?
谢谢
NIO在内部维护读写锁定;但是它们是在NIO中使用synchronized
块实现的。
使用synchronized
时,无法保证线程B在线程A之后获得锁定。线程C完全有可能在线程B之前获得写锁定。
请参阅以下锁定版本:Synchronized release order
如果你需要在多个线程中保证FIFO,那么你需要使用ReentrantLock
创建一个fair=true
并要求所有线程首先获得该锁。
维护顺序不是传输层的责任。因此,您通过相同的通道(相同的套接字)发送消息A和消息B,在服务器端,消息到达顺序是不确定的。
符合这些条件的消息到达订单是发送订单:
如果您需要订购,您的应用程序应该这样做。