Java NIO - многопоточный доступ к каналам

Основываясь на документации java.NIO, буферы являются поточно-небезопасными, тогда как каналы в большинстве случаев (FileChannel, SocketChannel и т. д.) безопасны для использования несколькими потоками. Что я не могу найти в документации, так это четкое описание того, что происходит, например, когда два потока начинают читать с FileChannel одновременно. Читает ли первая операция первые N байтов или возможно получить первые M байтов в буфер первого канала, а затем следующая пара перейдет во второй буфер, прежде чем переключение контекста прочитает еще немного в первый и т. Д. Кто-нибудь знает, каковы гарантии многопоточного доступа к каналам?

1 ответ

Решение

Чтение "включает в себя позицию файла" и, следовательно, блокирует последующие чтения другими потоками. Однако ничто не гарантирует, сколько байтов вернет чтение, одно- или многопоточное, за исключением того, что оно больше нуля, если осталось байтов для чтения.

Другие вопросы по тегам