网络通道(通常是Java NIO通道)是否是FIFO?还是我需要使用序列号自己实现FIFO?

谢谢

最佳答案

NIO在内部维护读写锁定;但是,它们是使用NIO中的synchronized块实现的。

使用synchronized时,不能保证线程B将在线程A之后获得锁定。线程C很有可能在线程B之前获得写锁定。

请参阅以下有关锁定释放的信息:Synchronized release order

如果需要跨多个线程保证FIFO,则需要使用ReentrantLock创建一个fair=true,并要求所有线程首先获取该锁。


http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/locks/ReentrantLock.html

09-15 15:55