If the given Path represents a file, use the overload of read defined in FileChannel that accepts an explicit position and avoid serializing reads.
Note: The underlying NIO implementation is not required to implement FileChannel.read(ByteBuffer, long) concurrently; Windows still appears to lock, as it returns true for NativeDispatcher.needsPositionLock. On MacOS X, the enclosed benchmark improves from: Benchmark Mode Cnt Score Error Units ZipFileSystemBenchmark.read avgt 10 75.311 ? 3.301 ms/op To: Benchmark Mode Cnt Score Error Units ZipFileSystemBenchmark.read avgt 10 12.520 ? 0.875 ms/op ------------- Commit messages: - 8265448: Avoid lock contention in reads from zipfs when possible Changes: https://git.openjdk.java.net/jdk/pull/3853/files Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=3853&range=00 Issue: https://bugs.openjdk.java.net/browse/JDK-8265448 Stats: 101 lines in 2 files changed: 97 ins; 0 del; 4 mod Patch: https://git.openjdk.java.net/jdk/pull/3853.diff Fetch: git fetch https://git.openjdk.java.net/jdk pull/3853/head:pull/3853 PR: https://git.openjdk.java.net/jdk/pull/3853