Chuyên đề Java Concurrency: thread, lock, JMM, CAS, AQS, thread pool và virtual thread
Java Concurrency là một trong những module quan trọng nhất, đồng thời cũng dễ gây nhầm lẫn nhất trong phát triển backend và phỏng vấn. Học concurrency không thể chỉ học thuộc API; cần xâu chuỗi vòng đời thread, cơ chế lock, memory model, atomic operation, thread pool và các lớp công cụ concurrency để hiểu.
Dành cho ai
- Backend developer muốn học Java Concurrency có hệ thống.
- Bạn đọc đang chuẩn bị câu hỏi phỏng vấn về thread, lock, JMM, CAS, AQS, thread pool, v.v.
- Bạn đọc đã dùng multithreading trong project nhưng chưa nắm chắc các vấn đề như deadlock, tham số thread pool và rò rỉ ThreadLocal.
- Engineer muốn hiểu cách vận dụng concurrent collections, CompletableFuture và virtual thread trong thực tế.
Trọng tâm học
- Tạo thread, vòng đời, context switch, thread safety và các vấn đề concurrency thường gặp.
- Giới hạn áp dụng của
synchronized,volatile,ReentrantLock, mutual exclusion lock, read-write lock, optimistic lock và pessimistic lock. - JMM, happens-before, instruction reordering, visibility, atomicity và ordering.
- Cơ chế bên trong của CAS, Atomic class, AQS, concurrent collections và blocking queue.
- Các tham số cốt lõi, rejection policy, task queue, cấu hình và thực tiễn production của thread pool.
- Cách sử dụng và rủi ro của CompletableFuture, ThreadLocal, virtual thread trong project thực tế.
Thứ tự đọc đề xuất
- Tổng hợp câu hỏi phỏng vấn Java Concurrency thường gặp (phần 1): Trước tiên lập danh sách câu hỏi cơ bản về thread, lock và thread safety.
- Tổng hợp câu hỏi phỏng vấn Java Concurrency thường gặp (phần 2) và Tổng hợp câu hỏi phỏng vấn Java Concurrency thường gặp (phần 3): Tiếp tục bổ sung JMM, CAS, AQS, thread pool và các công cụ concurrency.
- Giải thích chi tiết về Java lock, Giải thích chi tiết về optimistic lock và pessimistic lock, Giải thích chi tiết về CAS, Giải thích chi tiết về JMM (Java Memory Model): Trước tiên nắm hệ thống lock, sau đó hiểu ngữ nghĩa bên trong của concurrency control.
- Giải thích chi tiết về AQS, Tìm hiểu nguyên lý và ứng dụng của AQS qua implementation của ReentrantLock: Đi sâu tìm hiểu Java lock và synchronizer.
- Giải thích chi tiết về Java thread pool và Best practice cho Java thread pool: Nắm vững hạ tầng concurrency cơ bản được dùng phổ biến nhất trong production.
Bài viết cốt lõi
Câu hỏi phỏng vấn về concurrency
- Tổng hợp câu hỏi phỏng vấn Java Concurrency thường gặp (phần 1): Bao quát kiến thức cơ bản về thread, thread safety, lock và các vấn đề concurrency thường gặp.
- Tổng hợp câu hỏi phỏng vấn Java Concurrency thường gặp (phần 2): Tiếp tục hệ thống hóa các kiến thức cốt lõi như JMM, volatile, CAS, AQS.
- Tổng hợp câu hỏi phỏng vấn Java Concurrency thường gặp (phần 3): Bổ sung thread pool, các lớp công cụ concurrency, CompletableFuture và virtual thread.
Lock, memory model và synchronizer
- Giải thích chi tiết về Java lock: Từ mutual exclusion lock, read-write lock, spin lock đến
synchronized,ReentrantLockvà AQS, xây dựng hệ thống Java lock. - Giải thích chi tiết về optimistic lock và pessimistic lock: Hiểu các chiến lược xử lý xung đột concurrency khác nhau.
- Giải thích chi tiết về CAS: Hiểu compare-and-swap, vấn đề ABA và chi phí spin.
- Giải thích chi tiết về JMM (Java Memory Model): Nắm vững visibility, atomicity, ordering và happens-before.
- Giải thích chi tiết về AQS: Hiểu synchronization queue, exclusive/shared mode và bên trong các synchronizer thường gặp.
- Tìm hiểu nguyên lý và ứng dụng của AQS qua implementation của ReentrantLock: Tìm hiểu sâu hơn về AQS thông qua ReentrantLock.
Công cụ concurrency và thực tiễn áp dụng
- Giải thích chi tiết về Java thread pool: Hiểu các tham số cốt lõi, task queue, rejection policy và execution flow.
- Best practice cho Java thread pool: Tổng hợp các đề xuất về thread pool isolation, cấu hình và monitoring trong môi trường production.
- Tổng hợp các concurrent collections thường gặp của Java: Hệ thống hóa các concurrent collection như ConcurrentHashMap, CopyOnWriteArrayList và BlockingQueue.
- Tổng hợp các Atomic class: Hiểu cách atomic update các primitive type, array, reference và field.
- Giải thích chi tiết về ThreadLocal: Hiểu thread-local variable, ThreadLocalMap và rủi ro memory leak.
- Giải thích chi tiết về CompletableFuture: Nắm vững async orchestration, exception handling và cách sử dụng thread pool.
- Tổng hợp các câu hỏi thường gặp về virtual thread: Hiểu vai trò, trường hợp sử dụng và giới hạn của virtual thread.
Câu hỏi thường gặp
- Thread và process khác nhau như thế nào? Thread có những trạng thái nào?
- Thread safety là gì? Làm thế nào để chẩn đoán deadlock?
- Mutual exclusion lock, read-write lock, spin lock khác nhau như thế nào?
synchronizedvàReentrantLockkhác nhau như thế nào?volatilecó đảm bảo atomicity không? Nó giải quyết vấn đề gì?- JMM là gì? Quy tắc happens-before có tác dụng gì?
- CAS có ưu và nhược điểm gì? Giải quyết vấn đề ABA như thế nào?
- Tư tưởng cốt lõi của AQS là gì? Những lớp công cụ nào dựa trên AQS?
- Cấu hình các tham số cốt lõi của thread pool như thế nào? Chọn rejection policy ra sao?
- Vì sao không khuyến nghị trực tiếp sử dụng
Executorsđể tạo thread pool? - Vì sao
ThreadLocalcó thể gây memory leak? - Thread pool mặc định của CompletableFuture có rủi ro gì?
- Virtual thread có phù hợp với CPU-intensive task không?
Chuyên đề liên quan
Lời cuối
Nếu nội dung hữu ích với bạn, hãy tiện tay tặng JavaGuide một Star miễn phí để ủng hộ: GitHub | Gitee.
JavaGuide đã được duy trì gần bảy năm, tích lũy 6100+ commit, với sự chung tay hoàn thiện của 620+ contributor. Star, phản hồi và PR của bạn đều là động lực để dự án tiếp tục cập nhật.
Nếu bạn đang chuẩn bị phỏng vấn backend / phát triển ứng dụng AI, có thể tham khảo Knowledge Planet của tôi, bao gồm các project thực tế về backend và AI, tối ưu CV, hỏi đáp 1-1 và tài liệu về các trọng điểm thường gặp, đã được duy trì liên tục sáu năm.
