java NIO - 对通道的多线程访问

时间:2014-03-03 10:37:15

标签: java buffer nio channel

基于java.NIO的文档,缓冲区是线程不安全的,而大多数情况下的通道(FileChannel, SocketChannel等)可以安全地被多个线程使用。我在文档中找不到的内容清楚地描述了例如两个线程同时开始从FileChannel读取。第一个操作是读取前N个字节,还是可以将第一个M字节读取到第一个通道的缓冲区,然后下一个将转到第二个缓冲区,然后上下文切换会将更多内容读入第一个等等。谁知道多线程访问频道的保证是什么?

1 个答案:

答案 0 :(得分:1)

读取“涉及文件的位置”,因此阻止其他线程的后续读取。但是,没有什么能保证读取返回多少字节,无论是单线程还是多线程,除非在有剩余字节要读取时大于零。