网络通道(通常是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