# java-concurrency-lab **Repository Path**: hu0670/java-concurrency-lab ## Basic Information - **Project Name**: java-concurrency-lab - **Description**: java并发学习 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-08-13 - **Last Updated**: 2026-08-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # java-concurrency-lab > Java 并发编程 4 周学习实验室 —— 从线程基础到高阶并发,每天一个主题,边读边练。 本项目采用 **「示例代码 + TODO 练习」** 的模式:每个 Day 提供完整的骨架、注释和运行入口,关键逻辑以 `TODO(你来实现)` 的形式留给你动手补全,运行后通过日志/测试验证理解是否到位。 ## 🧱 技术栈 | 组件 | 版本 | 用途 | |------|------|------| | JDK | **21** | 编译目标(用到虚拟线程相关特性时升级) | | Maven | 3.9+ | 构建与依赖管理 | | Lombok | 1.18.34 | `@Slf4j` 注解日志 | | SLF4J + Logback | 2.0.13 / 1.5.6 | 日志门面 + 实现 | | JUnit 5 | 5.10.2 | 单元测试 | ## 📂 项目结构 ``` src/main/java/com/lab/concurrency/ └── week1_basic/ # 第一周:线程基础 ├── Day01_ThreadCreation.java # 线程创建的三种方式 ├── Day02_ThreadState.java # 线程状态流转 ├── Day03_ProducerConsumer.java # 生产者-消费者模型 ├── Day04_RaceCondition.java # 竞态条件与 synchronized ├── Day05_GracefulShutdown.java # 优雅停机(中断机制) ├── Day06_AlternatePrinting.java # 两线程交替打印 1-100 └── Day07_MyBlockingQueue.java # 手写阻塞队列(周末实战) src/main/resources/ └── logback.xml # 日志配置 src/test/java/com/lab/concurrency/ └── week1_basic/ └── Day07_MyBlockingQueueTest.java # Day 7 阻塞队列并发测试 ``` ## 📅 第一周课程表:线程基础 | Day | 主题 | 学习目标 | 核心知识点 | |-----|------|----------|------------| | **1** | 线程创建 | 掌握三种创建线程的方式 | `Thread` 继承 / `Runnable` / `Callable + FutureTask` | | **2** | 线程状态 | 观察线程状态流转 | `NEW → RUNNABLE → WAITING → TERMINATED`、`wait / notifyAll` | | **3** | 生产者-消费者 | 线程间协作经典范式 | `synchronized` + `wait / notifyAll`、有界缓冲区、虚假唤醒 | | **4** | 竞态条件 | 亲历 `count++` 丢更新 | 读-改-写、临界区、`synchronized` 保护 | | **5** | 优雅停机 | 协作式停止线程 | `interrupt / isInterrupted`、`InterruptedException` 处理 | | **6** | 交替打印 | 精确控制执行顺序 | `wait / notifyAll` 协调两线程打印奇偶数 | | **7** | 手写阻塞队列 | 综合实战 | 实现类似 `BlockingQueue` 的有界阻塞队列 + 并发测试 | > 💡 标注 `TODO(你来实现)` 的地方是刻意留白的练习点,完成前运行结果可能与预期不符。 ## 🚀 快速开始 ### 环境要求 - JDK 21+ - Maven 3.9+(或直接用 IDE 内置 Maven) ### 运行某个 Day 的示例 每个 Day 的类都带 `main` 方法,直接在 IDE 中右键运行即可,例如: ```bash # 命令行编译 mvn clean compile # 运行 Day01(需要 exec 插件或在 IDE 中运行 main 方法) mvn exec:java -Dexec.mainClass="com.lab.concurrency.week1_basic.Day01_ThreadCreation" ``` ### 运行测试 ```bash mvn test # 仅运行 Day 7 的阻塞队列测试 mvn test -Dtest=Day07_MyBlockingQueueTest ``` > ⚠️ `Day07_MyBlockingQueueTest` 要求你先实现 `put / take`,否则测试会失败或卡住。 ## 🗺️ 后续 Roadmap(4 周计划) - [x] **Week 1** — 线程基础(本仓库当前内容) - [ ] **Week 2** — `JUC` 锁与同步工具(`ReentrantLock`、`Condition`、`CountDownLatch`、`CyclicBarrier`、`Semaphore`) - [ ] **Week 3** — 原子类、`CAS` 与并发容器(`Atomic*`、`ConcurrentHashMap`、`CopyOnWrite*`) - [ ] **Week 4** — 线程池与异步编程(`ThreadPoolExecutor`、`CompletableFuture`、虚拟线程) ## 📝 学习建议 1. **按顺序做**:每天的示例难度递增,概念层层依赖。 2. **先读注释**:每个 `TODO` 上方都写了实现要点和注意事项(如「必须用 while 防虚假唤醒」)。 3. **跑起来观察日志**:日志里带有 `[thread-xxx]`,方便理解多线程交错执行的真实情况。 4. **改参数做实验**:把线程数、循环次数、缓冲区容量改大改小,观察行为变化。 --- License: 学习用途,自由使用。