using NIO
perform download using multiple threads