Concurrency cơ bản

Thread, Runnable, synchronized, volatile, ExecutorService, CompletableFuture, concurrent collections, virtual threads (Java 21). Hiểu memory model, happens-before, và vì sao concurrency khó hơn bạn nghĩ.

19 bài · ~257 phútMiễn phí

Nội dung

Danh sách bài học

  1. 01

    Module 01 — Concurrency cơ bản: tổng quan

    Bản đồ module concurrency: từ process/thread và race condition, qua bộ công cụ java.util.concurrent, tới executor, virtual thread và structured concurrency.

    ~10 phút
  2. 02

    Process và Thread — từ nền tảng hệ điều hành đến Java Concurrency

    Process khác thread ra sao, thread chia sẻ và giữ riêng gì. User vs kernel thread, ba mô hình ánh xạ M:1/1:1/M:N, và cách JVM chạy platform lẫn virtual thread.

    ~15 phút
  3. 03

    Thread API và vòng đời — start, join, interrupt

    Tạo và chạy thread đúng: start vs run, sáu trạng thái Thread.State, join/sleep, daemon thread, và cooperative cancellation — vì sao interrupt() chỉ set cờ.

    ~14 phút
  4. 04

    Thread Safety: Viết code đúng khi nhiều thread cùng chạm vào dữ liệu

    Shared mutable state là gốc của bug concurrency: tách atomicity khỏi visibility, rồi điểm bốn chiến lược confinement, immutability, synchronization, delegation.

    ~14 phút
  5. 05

    Confinement: Thread safety bằng cách không chia sẻ

    Thread safety bằng cách triệt tính shared: ad-hoc confinement, stack confinement, ThreadLocal và ScopedValue (Java 25). Khi nào confinement là đủ.

    ~14 phút
  6. 06

    Immutability: Thread safety bằng cách không thay đổi

    Thread safety bằng triệt tính mutable: điều kiện immutable, initialization safety của final, cạm bẫy field mutable trong record, và immutable holder.

    ~14 phút
  7. 07

    volatile & synchronized: Hai cơ chế đồng bộ nội tại của Java

    Hai cơ chế đồng bộ có sẵn trong ngôn ngữ ở hai đầu của phổ: volatile (chỉ visibility) và synchronized (mutual exclusion + visibility), Java Monitor Pattern, wait/notify.

    ~15 phút
  8. 08

    Atomic & CAS: đồng bộ lock-free cho thao tác trên một biến

    Đồng bộ lock-free cho thao tác đơn: CAS, AtomicInteger/Long/Reference, ABA problem, LongAdder và VarHandle. Khi nào atomic đủ, khi nào cần lock.

    ~14 phút
  9. 09

    ReentrantLock & Condition — khi synchronized là chưa đủ

    ReentrantLock mở ra tryLock, timeout, lockInterruptibly và fairness; Condition cho nhiều wait set độc lập trên một khóa — đổi lại bạn phải tự unlock trong finally.

    ~13 phút
  10. 10

    ReadWriteLock, StampedLock & AQS — khi đọc áp đảo ghi

    ReadWriteLock cho nhiều reader song song khi đọc áp đảo ghi, StampedLock thêm optimistic read, và AQS — bộ khung đứng sau mọi khóa của java.util.concurrent.

    ~13 phút
  11. 11

    Delegation & concurrent collections: tái dùng lớp thread-safe

    Đạt thread safety bằng cách ủy thác cho component có sẵn: khái niệm delegation (đủ vs vỡ), ConcurrentHashMap, CopyOnWriteArrayList, ConcurrentSkipList.

    ~13 phút
  12. 12

    Blocking queue & producer–consumer: tách nhịp sản xuất–tiêu thụ

    BlockingQueue và mẫu producer–consumer: put/take, bounded vs unbounded, backpressure, SynchronousQueue và các biến thể, shutdown sạch bằng poison pill.

    ~13 phút
  13. 13

    Synchronizers: Điều phối tiến độ giữa nhiều thread

    Điều phối tiến độ giữa nhiều thread: CountDownLatch, CyclicBarrier, Semaphore, Exchanger, Phaser — phân biệt bảo vệ dữ liệu với điều phối tiến độ.

    ~13 phút
  14. 14

    Executor Framework: Thread pool, lập lịch & shutdown

    Tách mô tả task khỏi cơ chế chạy task: ExecutorService, ThreadPoolExecutor tuning, scheduled execution, RejectedExecutionHandler, cancellation và shutdown.

    ~13 phút
  15. 15

    Future & CompletableFuture: từ blocking tới pipeline async

    Từ kết quả blocking đến pipeline async: Future, CompletionService, rồi CompletableFuture với thenApply/Compose/Combine, allOf/anyOf, xử lý lỗi và timeout.

    ~13 phút
  16. 16

    Fork/Join: Chia để trị song song với work-stealing

    Chia để trị song song với work-stealing: ForkJoinPool, RecursiveTask/RecursiveAction, ngưỡng sequential cutoff, và liên hệ với parallel streams.

    ~13 phút
  17. 17

    Virtual Threads: mô hình thread-per-request trở lại

    Thread-per-request trở lại với virtual thread (final Java 21): cơ chế mount/unmount, vì sao rẻ, pinning cần tránh, khi nào nên dùng và di cư từ thread pool.

    ~15 phút
  18. 18

    Structured Concurrency & ScopedValue: vòng đời nhóm task

    Vòng đời có kỷ luật cho nhóm task: StructuredTaskScope (JEP 505, preview ở Java 25), các Joiner fail-fast, và ScopedValue (final Java 25) thay ThreadLocal thời Loom.

    ~13 phút
  19. 19

    Module 01 — Tổng kết & cheat sheet

    Một trang để bookmark: cheat sheet 15 công cụ concurrency, glossary 18 thuật ngữ, 7 pitfall lớn nhất kèm code sai/đúng, và self-assessment cuối module.

    ~15 phút