多任务、多线程下载

第一次在论坛频道上发文章,大家轻拍。
有需要的可以一起研究一下,学了java也挣不了什么大钱,但可以写一些自己需要的工具,就当娱乐。没有需要的就当看个热闹。

前段时间为了下载播布客上的SWF视频,写了一个多任务、多线程的下载工具。
其中多线程下载部分是引用的ITEYE上别的同学的代码,地址找不到了,但代码中注释

/**
*
* @author annegu
* @since 2009-07-16
*
*/
public class DownloadTask {}

在使用时做了适当的小修改,以适合我的需求。在这里表示感谢!
同时也感谢播布客提供的视频。

关于多任务(多线程)部分还有一些问题不是很明白,希望各位大牛们指点迷津。

用的是jdk5里面的java.util.concurrent包。

public static void main(String[] args) {
// 构造一个线程池
ThreadPoolExecutor threadPool = new ThreadPoolExecutor(5, 5, 30,
TimeUnit.SECONDS, new ArrayBlockingQueue<Runnable>(70),
new ThreadPoolExecutor.DiscardOldestPolicy());

List<Map> list = getDownloadList();
for (int i = 0; i < list.size(); i++) {
try {
// 产生一个任务,并将其加入到线程池
threadPool.execute(new DownloadThread(list.get(i)));
} catch (Exception e) {
e.printStackTrace();
}
}
}


这里面ThreadPoolExecutor的几个参数值了解的不是很彻底,特别是
new  ArrayBlockingQueue<Runnable>(70)

这个大小难道要比我所有的任务数要大吗?

附上下载列表的样式。解析地址的代码也放在了附件中。

第17讲:Chapter07.Instance.and.Media.Recovery.Structures
http://www.boobooke.com//v//bbk1413
第18讲:Chapter07.Instance.and.Media.Recovery.Structures
http://www.boobooke.com//v//bbk1414


相关代码在附件中。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1.得到服务器下载文件的大小,然后在本地设置一个临时文件和服务器端文件大小一致 a)获得访问网络地址 b)通过URL对象的openConnection()方法打开连接,返回一个连接对象 c)设置请求头 i.setRequestMethod ii.setConnectTimeout iii.setReadTimeout d)判断是否响应成功 e)获取文件长度(getContentLength()) f)随机访问文件的读取与写入RandomAccessFile(file, mode) g)设置临时文件与服务器文件大小一致(setLength()) h)关闭临时文件 2.计算出每个线程下载的大小(开始位置,结束位置) a)计算出每个线程下载的大小 b)for循环,计算出每个线程的开始、结束位置 c)最后一个线程处理 3.每创建好一次就要开启线程下载 a)构造方法 b)通过URL对象的openConnection()方法打开连接,返回一个连接对象 c)设置请求头 i.setRequestMethod ii.setConnectTimeout d)判断是否响应成功(206) e)获取每个线程返回的流对象 f)随机访问文件的读取与写入RandomAccessFile(file, mode) g)指定开始位置 h)循环读取 i.保存每个线程下载位置 ii.记录每次下载位置 iii.关闭临时记录位置文件 iv.随机本地文件写入 v.记录已下载大小 i)关闭临时文件 j)关闭输入流 4.为了杀死线程还能继续下载的情况下,从本地文件上读取已经下载文件的开始位置 a)创建保存记录结束位置的文件 b)读取文件 c)将流转换为字符 d)获取记录位置 e)把记录位置赋给开始位置 5.当你的n个线程都下载完毕的时候我进行删除记录下载位置的缓存文件 a)线程下载完就减去 b)当没有正在运行的线程时切文件存在时删除文件
注意: 如果下载后无法直接运行,则查看电脑是否有F盘,如果没有,可修改jar包中的配置文件,将默认路径设置到其他盘,如C盘 说明: 1、这是myDownloader2.0自制下载器,在1.0版本的基础上做了修正和功能上的扩展; 2、该“myDownloader2.0资源包”包括: (1)“myDownloader_2.0”文件夹,保存下载器的源码, 其中包含的doc文件夹存放的是有MyEclipse,javadoc生成的关于下载器的API文档; (2)“jar包”文件夹,其中myDownloader2.0.jar可以双击运行下载器 (前提,电脑上装有JDK环境)。 3、可查看下载器“功能介绍”了解下载器具体功能。 功能介绍; 1、基本下载功能; 2、支持多任务多线程同时下载; 3、每个任务的线程数由用户在新建任务时自定义,缺省为5个线程; 4、任务下载过程中可以点击“线程+”或“线程-”即时增减线程; 5、选择任务,可以在任务信息栏中查看任务下载的信息; 6、对于正在下载和暂停的任务,可以再下载分块图示中查看文件的分块下载情况; (灰色为未下载,绿色为下载中,蓝色为完成) 7、若下载中删除任务,则任务会先暂停,再被移动到垃圾箱中; 8、整个界面分为三个视图:正在下载、已完成、垃圾箱; 9、下载过程可以暂停任务,点击开始可以继续下载; 10、对于失败的任务可以选择重新下载; 11、删除任务,如任务当前在正在下载或已完成,则任务将被删除到垃圾箱中, 若在垃圾箱中删除任务,则是彻底删除; 12、垃圾箱中的任务可以恢复回正在下载或已下载视图中; 13、可以点击“打开”,打开已完成的任务; 14、右键“打开文件夹”可以打开任务文件被下载到的文件夹; 15、清空垃圾箱; 16、菜单栏“关于”,查看版本及作者等信息; 17、菜单栏“功能介绍”,查看下载器的相关功能介绍; 18、程序退出前会自动暂停所有正在下载的任务,并保存到临时文件中, 下次启动程序可以继续下载; 19、程序启动时,会在电脑中检查创建myDownloader下载器的相应文件夹, 用于保存临时文件和日志文件; 文件夹具体路径可以到myDownloader.ini中进行配置,缺省为:F:/myDownloader 20、功能尚在扩展中,请多提意见和建议。 2009年10月 CASHUANGNING
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值