Stan asks a very good question in that
thread: " What bottleneck constrains one thread that will not constrain two or ten?" Why are you trying to download a single file with multiple threads when the bottleneck is likely network throughput, which adding additional threads will only make worse?
And yes, skip() reads in bytes in order to "skip" them. RandomAccessFile has the ability to move a file pointer around without reading bytes.