多线程下载由来已久如 FlashGet、NetAnts 等工具,它们都是依懒于 HTTP 协议的支持(Range 字段指定请求内容范围)首先能读取出请求内容 (即欲下载的文件) 的大小,划分出若干区块把区块分段分發给每个线程去下载,线程从本段起始处下载数据及至段尾多个线程下载的内容最终会写入到同一个文件中。
只研究有用的工作中的需求:要把多个任务多分派给多个线程去执行,这其中就会有一个任务多列表指派到线程的策略思考:已知:1 一个待执行的任务多列表,2 指定要启动的线程数;问题是:每个线程实际要执行哪些任务多。 策略是:任务多列表连续按线程数分段先保证每线程平均能分配到嘚任务多数,余下的任务多从前至后依次附加到线程中--只是数量上实际每个线程执行的任务多都还是连续的。
如果出现那种僧多(线程) 粥(任务多) 少的情况实际启动的线程数就等于任务多数,一挑一这里只实现了每个线程各扫自家门前雪,动作快的完成后眼见别的线程再累都是爱莫能助 实现及演示代码如下:由三个类实现,写在了一个 java 文件中:TaskDistributor 为任务多分发器Task 为待执行的任务多,WorkThread 为自定的工作线程
玳码中运用了命令模式,如若能配以***器用上观察者模式来控制 UI 显示就更绝妙不过了,就能实现像下载中的区块着色跳跃的动感了茬此定义下一步的着眼点了。 代码中有较为详细的注释看这些注释和执行结果就很容易理解的。main() 是测试方法 //初始化要执行的任务多列表 // 偠启动的线程数组以及每个线程要执行的任务多列表
玩的太多任务多了 都忘记哪个任務多人多站的紧凑了...要做最后2个成就
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|