跳到主要内容
CodeAtlas
Java · 语言进阶阶段 25 项必做

多线程下载器(断点续传 + 进度回调)

理解 JVM 与并发,能写出线程安全的代码

难度
建议投入 32–56 小时· 6 条需求
验收权重
能手写一个固定大小线程池;能说明 synchronized 与 Lock 的差异40%
核心功能可独立跑通,无阻断性 bug25%
关键路径有测试或可复现的验收脚本15%
README 写清运行方式、架构与踩坑10%
能在 5 分钟内讲清设计与取舍10%

总分 100。低于 60 分说明这个阶段还没过,回去补知识点,不丢人。

项目背景

这是「Java」路径第 2 阶段(阶段二 · 语言进阶)的验收项目。本阶段目标是:理解 JVM 与并发,能写出线程安全的代码。项目不是练习题的堆砌,而是把这一阶段的知识点压缩成一个能演示、能讲清楚取舍的成品。

MVP 目标
  • 理解 JVM 与并发,能写出线程安全的代码
  • 做出可运行、可演示的「多线程下载器」
  • 把 泛型与反射、IO / NIO、多线程与线程池 真正用进项目,而不是停在笔记里

功能需求清单

5 项必做 · 1 项建议
  1. 1
    分块下载必做

    用 HTTP Range 分块下载大文件,块大小可配置。

  2. 2
    断点续传必做

    记录每块进度到进度文件,中断后从已完成块继续。

  3. 3
    线程池并发必做

    线程数可配置;下载完成后正确关闭线程池,无线程泄漏。

  4. 4
    进度回调与取消必做

    实时输出总进度;支持主动取消并保存已完成部分。

  5. 5
    完整性校验必做

    对比文件大小或 SHA-256,校验失败给出提示。

  6. 6
    测试或验收脚本建议

    对分块计算、进度合并写单元测试。

技术约束

泛型与反射IO / NIO多线程与线程池JVM 内存结构与 GC 基础Lambda 与 Stream

交付物

  • Git 仓库(含分阶段提交记录,不是最后一次性上传)
  • README:项目简介、架构/流程图、运行方式、已知限制
  • 演示材料:截图,或 1–2 分钟录屏
  • 复盘:做错的 3 个决定与改进方案

加分项

  • 下载限速
  • 多任务队列
  • Swing/JavaFX 进度界面

最容易翻车的地方

  • 共享进度变量不加锁导致数据错乱
  • 忽略服务器不支持 Range(206)的情况
  • 异常时线程池未关闭

做完之后,简历怎么写

「多线程下载器」:独立完成 断点续传、进度回调,使用 泛型与反射、IO / NIO、多线程与线程池;通过「能手写一个固定大小线程池」验收。

写「做了什么 + 用了什么 + 结果如何」,不要写「参与了 XX 系统」。