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
  • Kết hợp CompletableFuture: thenCombine, allOf, anyOf

    JAVA 25 SELF
    Cấp độ 55,Bài học 2
    Cách chạy song song các tác vụ và hợp nhất kết quả bằng CompletableFuture: hợp nhất hai kết quả qua thenCombine/ thenCombineAsync, chờ một tập tác vụ bằng allOf, phản hồi theo kết quả nhanh nhất bằng anyOf. Chúng ta sẽ xem xét chữ ký (signature), các ví dụ thực tiễn với supplyAsync, xử lý không chặn ( thenAccept, thenRun), cũng như các điểm tinh tế về lỗi và cách xử lý chúng ( exceptionally, handle, whenComplete). Cuối cùng — bảng so sánh gọn nhẹ các phương thức.
    Có sẵn
  • Xử lý lỗi trong mã bất đồng bộ: exceptionally, handle

    JAVA 25 SELF
    Cấp độ 55,Bài học 3
    Cách bắt và xử lý ngoại lệ một cách an toàn trong các chuỗi CompletableFuture: phân tích vai trò của exceptionally (trả về giá trị dự phòng khi có lỗi), handle (bộ xử lý tổng quát cho cả thành công/lỗi) và whenComplete (hành động phụ mà không thay đổi kết quả). Thảo luận vì sao việc gọi trực tiếp get()/ join() lại bọc nguyên nhân vào ExecutionException/ CompletionException, cách kết hợp các bước ( thenApply, thenAccept) và những lỗi thường gặp cần tránh.
    Có sẵn
  • thenCompose + Executor tùy chỉnh + timeout

    JAVA 25 SELF
    Cấp độ 55,Bài học 4
    Cách “ghép” đúng các bước bất đồng bộ trong CompletableFuture bằng thenCompose và khi nào chỉ cần thenApply; cách và lý do kết nối pool luồng riêng qua ExecutorService (thay cho ForkJoinPool.commonPool()); cách bảo vệ chuỗi khỏi “chờ mãi mãi” bằng orTimeout và completeOnTimeout. Cuối cùng — ví dụ thực hành với Executor tùy chỉnh, thenCompose và timeout, cùng các lỗi thường gặp và cách xử lý.
    Có sẵn
  • IO bất đồng bộ: AsynchronousFileChannel (NIO2)

    JAVA 25 SELF
    Cấp độ 56,Bài học 0
    Trong bài giảng này, chúng ta phân tích I/O bất đồng bộ (AIO) trong Java NIO.2: nó khác gì so với I/O đồng bộ, cách làm việc với AsynchronousFileChannel, khởi chạy các thao tác đọc/ghi qua Future và CompletionHandler, cũng như tác động của việc chọn pool luồng ExecutorService. Trong thực hành, chúng ta xem cách mở kênh qua open, các phương thức read/write, sơ đồ tương tác và các lỗi thường gặp.
    Có sẵn
  • Future, CompletionHandler: xử lý hoàn tất các thao tác

    JAVA 25 SELF
    Cấp độ 56,Bài học 1
    Cách xử lý việc hoàn tất các thao tác bất đồng bộ NIO2 trong Java: “lời hứa” qua Future và callback qua CompletionHandler. Chúng ta sẽ phân tích chữ ký read/ write của AsynchronousFileChannel, nhận kết quả theo cách chặn bằng get() và thăm dò với isDone(), cũng như xử lý không chặn trong completed()/ failed(). Sẽ có các ví dụ thực tế về đọc/ghi và phần so sánh ngắn các cách tiếp cận.
    Có sẵn
  • Xử lý tệp văn bản bất đồng bộ

    JAVA 25 SELF
    Cấp độ 56,Bài học 2
    Thực hành I/O bất đồng bộ trong Java: đọc các tệp văn bản lớn theo từng khối vào ByteBuffer qua AsynchronousFileChannel, chuyển đổi byte thành ký tự một cách chính xác bằng CharsetDecoder, ghi dữ liệu trở lại theo kiểu bất đồng bộ (thông qua Future hoặc CompletionHandler). Phân tích vấn đề “đứt đoạn” ký tự đa byte (ví dụ, "UTF-8"), đếm số dòng ngay khi đọc, lựa chọn charset và các lỗi điển hình khi làm việc với buffer và channel.
    Có sẵn
  • Xử lý lỗi trong I/O bất đồng bộ, hủy thao tác

    JAVA 25 SELF
    Cấp độ 56,Bài học 3
    Cách bắt và xử lý lỗi đúng trong I/O bất đồng bộ của Java: callback CompletionHandler với các phương thức completed/ failed, ghi log và thông báo. Phân tích hủy thao tác qua Future và cancel( boolean), hệ quả đối với get() và CancellationException, cũng như các lời khuyên thực tế: try-with-resources, đồng bộ hóa với CountDownLatch/ CompletableFuture và giải phóng tài nguyên.
    Có sẵn
  • Phân tích lỗi khi làm việc bất đồng bộ với các tệp

    JAVA 25 SELF
    Cấp độ 56,Bài học 4
    Phân tích thực hành các cạm bẫy khi làm việc với I/O tệp bất đồng bộ trong Java NIO: quản lý bộ đệm ByteBuffer đúng cách (thuộc tính position/limit, gọi flip(), clear(), compact()), race khi thực hiện song song với AsynchronousFileChannel, đóng tài nguyên (channel.close(), try-with-resources), xử lý lỗi trong CompletionHandler (phương thức failed(...)), quản lý vòng đời thao tác qua Future<Integer> và đồng bộ bằng CountDownLatch, xử lý mã hóa ký tự đúng đắn với CharsetDecoder, cũng như lựa chọn pool luồng phù hợp ExecutorService.
    Có sẵn
  • Luồng so với luồng ảo: khác biệt, ưu điểm

    JAVA 25 SELF
    Cấp độ 57,Bài học 0
    Phân tích sự khác nhau giữa luồng nền tảng và luồng ảo: mô hình “ Platform Thread → OS” hoạt động ra sao và vì sao nó nặng nề, điều gì thay đổi với luồng ảo ( Virtual Thread) trên carrier threads, và cách điều đó mang lại khả năng mở rộng mà không cần “spaghetti” reactive. Xem thực hành với Thread.ofVirtual(), so sánh hành vi của tác vụ I/O‑bound và CPU‑bound, đề cập tới tính tương thích (các lời gọi chặn như InputStream.read, Socket.accept) và các lỗi điển hình (cơ chế đồng bộ cũ, kỳ vọng “tăng tốc kỳ diệu”).
    Có sẵn
  • Tạo luồng ảo: Thread.ofVirtual().start()

    JAVA 25 SELF
    Cấp độ 57,Bài học 1
    Thực hành làm việc với luồng ảo trong Java 21: chúng khác gì so với luồng nền tảng, cách khởi chạy qua Thread.startVirtualThread(...) và Thread.ofVirtual().start(...), khi nào vẫn phù hợp dùng new Thread(...) hoặc Thread.ofPlatform(), và cách thực thi hàng loạt tác vụ bằng Executors.newVirtualThreadPerTaskExecutor(). Sẽ phân tích cách chờ hoàn tất bằng join(), xử lý lỗi với Future và ExecutionException, cũng như các lỗi thường gặp khi sử dụng Virtual Threads.
    Có sẵn
  • Khả năng mở rộng và hiệu năng của Virtual Threads

    JAVA 25 SELF
    Cấp độ 57,Bài học 2
    So sánh thực tế giữa luồng nền tảng Thread và luồng ảo trong Java 21: cách JVM nhờ “ các luồng mang” (carrier threads) thực thi hàng trăm nghìn tác vụ với bộ nhớ tối thiểu, nơi luồng ảo phát huy (I/O-bound) và nơi không (CPU-bound). Phân tích các hạn chế ( synchronized, khóa native), best practices ( Executors.newVirtualThreadPerTaskExecutor()), giám sát bằng JVisualVM và Java Flight Recorder, cũng như các lỗi điển hình khi chuyển sang Virtual Threads.
    Có sẵn
  • Sử dụng Executor với luồng ảo

    JAVA 25 SELF
    Cấp độ 57,Bài học 3
    Cùng tìm hiểu cách chạy mỗi nhiệm vụ trong một luồng ảo bằng Executors.newVirtualThreadPerTaskExecutor() (Java 21), khác gì so với các pool cổ điển ( newFixedThreadPool, newCachedThreadPool), cách kết thúc đúng bằng shutdown() và awaitTermination(...), lấy kết quả nhiệm vụ qua Future, và nơi luồng ảo mang lại lợi ích lớn nhất (I/O quy mô lớn, máy chủ web, kiểm thử tải). Cuối cùng — các lỗi thường gặp và lưu ý.
    Có sẵn
  • 1
  • ...
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
Học
  • Đăng ký
  • Khóa học Java
  • Trợ giúp bài tập
  • Bảng giá
  • Dự án trò chơi
  • 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