CodeGym
AI Academy
Khuyến mãi
CodeGym University
Học tập
Khóa học
Bài tập
Khảo sát & Bài kiểm tra
Trò chơi
Trợ giúp
Lịch
Cộng đồng
Người dùng
Diễn đàn
Trò chuyện
Bài viết
Câu chuyện thành công
Hoạt động
Đánh giá
Gói đăng ký
Chủ đề sáng

Bài học

  • Đánh giá
  • Về chúng tôi
Bắt đầu
Bắt đầu học
Bắt đầu học ngay
  • Tiến độ của tôi
  • Khóa học
  • Bản đồ Quest
  • Bài học
  • Deadlock: nguyên nhân, ví dụ, cách khắc phục

    JAVA 25 SELF
    Cấp độ 53,Bài học 0
    Trong bài giảng này, chúng ta tìm hiểu khóa chéo giữa các luồng (deadlock) trong Java là gì, vì sao xảy ra và bốn điều kiện cần để nó xuất hiện. Với ví dụ thực tế dùng synchronized chúng ta tái hiện vấn đề, sau đó tìm hiểu các chiến lược phòng tránh: thống nhất thứ tự chiếm tài nguyên, sử dụng ReentrantLock.tryLock với timeout, rút gọn vùng tới hạn và tránh các khóa lồng nhau không cần thiết. Trình bày cách chẩn đoán qua Thread Dump và jstack, cách nhận diện trạng thái BLOCKED/ WAITING, và kết thúc bằng checklist cùng các lỗi điển hình.
    Có sẵn
  • Livelock và Starvation: định nghĩa và ví dụ

    JAVA 25 SELF
    Cấp độ 53,Bài học 1
    Phân tích các hiện tượng bất thường trong lập trình đồng thời Livelock và Starvation: chúng khác gì so với Deadlock, trông như thế nào trong mã và trong log. Có các ví dụ bằng Java: “những worker lịch sự” (khóa “sống” — livelock) và hiện tượng đói do ưu tiên và do các khóa không công bằng. Học cách phát hiện vấn đề (ghi log, Thread dump, VisualVM, Java Mission Control) và phòng tránh: thêm độ trễ ngẫu nhiên trước khi thử lại ( Thread.sleep), thuật toán không khóa, khóa công bằng qua ReentrantLock với cờ fairness ( new ReentrantLock(true)), thiết kế miền tới hạn gọn gàng và tránh lạm dụng setPriority() và synchronized.
    Có sẵn
  • Bộ sưu tập thread-safe: ConcurrentHashMap và các loại khác

    JAVA 25 SELF
    Cấp độ 53,Bài học 2
    Trong bài giảng này, chúng ta sẽ phân tích vì sao các bộ sưu tập thông thường ( ArrayList, HashMap) nguy hiểm trong môi trường đa luồng, và những lựa chọn thay thế an toàn cho luồng mà gói java.util.concurrent cung cấp: ConcurrentHashMap, CopyOnWriteArrayList, ConcurrentLinkedQueue, các cấu trúc dựa trên skip-list và BlockingQueue. Chúng ta sẽ bàn về các thao tác nguyên tử như merge, putIfAbsent, computeIfAbsent, so sánh với Collections.synchronizedMap, xem các ví dụ thực tế và những lỗi thường gặp (iterator nhất quán yếu, chuỗi thao tác không nguyên tử, v.v.).
    Có sẵn
  • AtomicInteger, AtomicReference: các thao tác nguyên tử

    JAVA 25 SELF
    Cấp độ 53,Bài học 3
    Tại sao phép tăng i ++ không hoạt động trong môi trường đa luồng, thao tác nguyên tử là gì và gói java.util.concurrent.atomic cung cấp chúng như thế nào. Cùng tìm hiểu AtomicInteger và AtomicReference, các phương thức incrementAndGet(), compareAndSet(...), cơ chế bên trong CAS (Compare-And-Swap), cũng như khi nào nên chọn synchronized và khi nào — LongAdder. Cuối cùng — các lỗi điển hình: thao tác phức tạp, ABA và tính an toàn luồng của các đối tượng lồng.
    Có sẵn
  • Chẩn đoán và gỡ lỗi chương trình đa luồng

    JAVA 25 SELF
    Cấp độ 53,Bài học 4
    Cách chụp và đọc Thread Dump bằng jstack, VisualVM và IDE, nhận biết trạng thái luồng ( RUNNABLE, BLOCKED, WAITING) và tìm vòng khóa lẫn nhau. Ta sẽ xem xét giám sát luồng trong Java Mission Control và Java Flight Recorder, thực hành logging (tên luồng, vào/ra khỏi synchronized), giảm thiểu lock, kiểm thử tính cạnh tranh với CountDownLatch và phân tích một case deadlock thực tế. Cuối cùng — các lỗi thường gặp và cách tránh chúng.
    Có sẵn
Học
  • Đăng ký
  • Khóa học Java
  • Trợ giúp bài tập
  • Bảng giá
  • Cú pháp Java
Cộng đồng
  • Người dùng
  • Bài viết
  • Diễn đàn
  • Trò chuyện
  • Câu chuyện thành công
  • Hoạt động
  • Chương trình giới thiệu
Công ty
  • Về chúng tôi
  • Liên hệ
  • Đánh giá
  • Phòng báo chí
  • CodeGym cho EDU
  • Câu hỏi thường gặp
  • Hỗ trợ
CodeGymCodeGym là một khóa học trực tuyến để học lập trình Java từ đầu. Khóa học này là cách hoàn hảo để nắm vững Java cho người mới bắt đầu. Nó chứa 1200+ bài tập với kiểm tra ngay lập tức và phạm vi lý thuyết cơ bản cần thiết về Java. Để giúp bạn thành công trong học tập, chúng tôi đã triển khai một bộ tính năng tạo động lực: bài kiểm tra, dự án lập trình, nội dung về phương pháp học hiệu quả, và hỗ trợ sự nghiệp lập trình viên Java.
Theo dõi chúng tôi
Ngôn ngữ giao diện
English Deutsch Español हिन्दी Français Português Polski বাংলা 简体中文 मराठी தமிழ் Italiano Bahasa Indonesia 繁體中文 Nederlands 日本語 한국어 Bulgarian Danish Hungarian Basa Jawa Malay Norwegian Romanian Swedish Telugu Thai Українська Filipino Turkish Azərbaycan Русский
Vietnamese
"Lập trình viên được tạo nên, không sinh ra" © 2026 CodeGym
MastercardVisa
"Lập trình viên được tạo nên, không sinh ra" © 2026 CodeGym