Skip to content

Web-Learn-GSF/JUC_Examples_FileDownload

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

前言

本文测试了多种方式下载文件,借以学习多线程。

项目各文件作用

single_thread

这个包是单线程下载方法的实现

SingleThreadDownload 单线程方法下载

multi_thread_no_pool

这个包是多线程下载方法的实现,而且不带有线程池

MultiThreadDownload 主方法(创建多线程,执行下载)
DownLoad_Thread 通过继承Thread实现线程方法
DownLoad_Runnable 通过实现Runnable接口实现线程方法

multi_thread_with_pool

basic

这个包是多线程下载方法的实现,带有线程池。

通过线程池的shutdown()方法和awaitTermination()方法实现下载时间的统计。

原理是:线程池不接受新请求,等待所有线程任务执行完毕后,再执行主线程的后续代码。

MultiThreadDownloadWithPool 主方法(通过线程池,提交线程任务,执行下载)
DownLoad_Runnable_pool multi_thread_no_poo包里面的DownLoad_Thread方法内容一致,一模一样复制过来

BuCountDownLatch

这个包是多线程下载方法的实现,带有线程池。

通过CountDownLatch类来实现下载时间的统计。

原理是:计数器+阻塞队列。通过设置计数器的值(等于任务数),然后通过await()方法将当前线程加入阻塞队列;然后每个任务执行完毕后,调用countDown()方法使得计数器的值-1;当计数器的值等于0时,会唤醒阻塞队列里面的线程。

各方法下载时长

方法 时长(毫秒)
单线程 4300
继承Thread实现多线程:1 4300
继承Thread实现多线程:2 2300
继承Thread实现多线程:3-8 2300 时长基本没变化
继承Thread实现多线程:100 5600 时长变长且连接会过期,需要延长连接时间
实现Runnable接口实现多线程 各线程数量的运行时间基本同于Thread
通过ThreadPoolExecutor创建线程池,Runnable提交任务:1 4300
通过ThreadPoolExecutor创建线程池,Runnable提交任务:2-n 时长基本同上

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages