using multiply threads for downloading instead of multiply processes
implemented Threaded downloading
and fixed race conditions