CodeGym
Khuyến mãi
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
  • Scoped Values và các cơ chế luồng mới (Java 21+)

    JAVA 25 SELF
    Cấp độ 57,Bài học 4
    Giải thích vì sao ThreadLocal cổ điển dần lỗi thời trong thế giới luồng ảo, và cách ScopedValue xuất hiện để thay thế: ngữ cảnh được gắn với phạm vi thực thi chứ không phải với luồng. Ví dụ từng bước về truyền ngữ cảnh (người dùng, REQUEST_ID), scope lồng nhau và ghi đè, tích hợp với luồng ảo ( Executors. newVirtualThreadPerTaskExecutor()). Thảo luận so sánh ThreadLocal vs ScopedValue, mẹo thực tiễn, hạn chế và góc nhìn về Structured Concurrency (preview).
    Có sẵn
  • Structured Concurrency

    JAVA 25 SELF
    Cấp độ 58,Bài học 0
    Structured Concurrency biến một mớ luồng hỗn loạn thành một hệ phân cấp tác vụ có kiểm soát: bạn khởi chạy các tác vụ con trong các luồng ảo bên trong StructuredTaskScope, đợi chúng bằng join(), xử lý lỗi tập trung bằng throwIfFailed() và lấy kết quả qua resultNow()/ result(). Chúng ta sẽ xem các chính sách kết thúc ShutdownOnFailure và ShutdownOnSuccess, so sánh với CompletableFuture, xem ví dụ bộ tổng hợp HTTP và các lỗi thường gặp khi sử dụng structured concurrency.
    Có sẵn
  • Hủy tác vụ và timeout xuyên qua ngăn xếp

    JAVA 25 SELF
    Cấp độ 58,Bài học 1
    Cách hủy đúng đắn các thao tác dài và blocking trong Java: ngắt hợp tác qua Thread.interrupt(), hủy tác vụ qua Future.cancel() và hành vi của CancellationException, timeout và hủy trong CompletableFuture ( orTimeout, completeOnTimeout), structured concurrency với StructuredTaskScope, deadline chung (time‑budget) và truyền timeout xuống dưới ngăn xếp (bao gồm Instant/ Duration và Scoped Values). Phân tích thực hành với IO blocking và các lỗi thường gặp.
    Có sẵn
  • Bộ đồng bộ hóa cấp cao

    JAVA 25 SELF
    Cấp độ 58,Bài học 2
    Trong bài giảng này, chúng ta tìm hiểu các bộ đồng bộ hóa cấp cao trong java.util.concurrent: CountDownLatch, CyclicBarrier, Phaser và Exchanger. Học cách phối hợp việc khởi chạy và kết thúc tác vụ qua await()/ countDown(), xây dựng các phase dùng nhiều lần và hành động tại barrier với await(), quản lý các thành viên động của “dàn nhạc” bằng register()/ arriveAndAwaitAdvance()/ arriveAndDeregister() và trao đổi dữ liệu theo cặp qua exchange(). Trên thực tế, chúng ta sẽ triển khai khởi động hàng loạt worker và “tick trò chơi”, đồng thời phân tích các lỗi thường gặp: tính một lần của CountDownLatch, xử lý BrokenBarrierException và gọi deregister() đúng cách. Ở mọi nơi, tránh đau đầu với wait()/ notify().
    Có sẵn
  • StampedLock và các bộ đếm ít tranh chấp

    JAVA 25 SELF
    Cấp độ 58,Bài học 3
    Khi ReentrantReadWriteLock và ReadWriteLock cổ điển bắt đầu ì ạch dưới tải cao, StampedLock với đọc lạc quan đến cứu trợ: cặp tryOptimisticRead + validate mang lại các lần đọc gần như “miễn phí” khi việc ghi hiếm. Chúng ta sẽ phân tích các chế độ khóa, cách làm việc với “tem” (stamps), các giới hạn về reentrancy, so sánh với ReentrantReadWriteLock, đồng thời xem các bộ đếm ít tranh chấp — LongAdder và LongAccumulator — và vì sao chúng vượt AtomicLong trong cạnh tranh. Kết thúc bằng thực hành: cache chủ yếu đọc và một mini-benchmark.
    Có sẵn
  • Java Memory Model (JMM)

    JAVA 25 SELF
    Cấp độ 58,Bài học 4
    Phân tích các quy tắc về khả năng hiển thị và sắp xếp thao tác trong Java Memory Model: quan hệ happens-before có nghĩa là gì, khi nào và bằng cách nào volatile, synchronized, các trường cuối ( final) giúp ích, và vì sao nếu thiếu chúng sẽ xuất hiện dữ liệu “cũ”. Chúng tôi sẽ trình bày cách publish đối tượng an toàn, double-checked locking đúng cách, truy cập mức thấp qua VarHandle, tác động của false sharing và annotation @Contended, cũng như các ghi chú thực hành về Thread.start()/ Thread.join(), Future.get() và microbenchmark JMH.
    Có sẵn
  • Đọc và ghi tệp đa luồng

    JAVA 25 SELF
    Cấp độ 59,Bài học 0
    Hướng dẫn thực hành về làm việc song song với tệp trong Java: khi nào đa luồng thực sự tăng tốc IO và khi nào thì không, lựa chọn công cụ — Thread, pool luồng qua ExecutorService, bất đồng bộ với CompletableFuture và stream song song — cũng như đọc các tệp lớn theo từng phần qua FileChannel, ghi an toàn vào log chung và các giới hạn của OS/FS. Cùng phân tích các mẫu khởi chạy tác vụ, cấu hình pool, các phương thức shutdown()/ awaitTermination() và các lỗi thường gặp.
    Có sẵn
  • Xử lý tệp song song: ForkJoin, Parallel Streams

    JAVA 25 SELF
    Cấp độ 59,Bài học 1
    Hướng dẫn thực hành về song song hóa các tác vụ tệp trong Java: cách bật tính song song trong Stream API bằng phương thức parallel()/ parallelStream(), cách ForkJoinPool hoạt động và cấu hình, và khi nào nên sử dụng RecursiveTask. Chúng ta sẽ bàn về nơi tính song song thực sự tăng tốc I/O, cách quản lý common thread pool, và cách đóng tài nguyên an toàn ( try-with-resources). Cuối cùng — cái nhìn nhanh về truy cập theo vị trí qua FileChannel để đọc/ghi các phần của tệp lớn.
    Có sẵn
  • Duyệt hệ thống tệp song song: Files.walk + parallel() và ForkJoin

    JAVA 25 SELF
    Cấp độ 59,Bài học 2
    Cách tăng tốc duyệt các thư mục lớn và xử lý hàng nghìn tệp: dùng Files.walk() và stream song song qua parallel(), hiểu vai trò của ForkJoinPool.commonPool() và tinh chỉnh mức độ song song. Phân tích khi nào nên chuyển sang ExecutorService, sự khác nhau giữa tác vụ CPU-bound và IO-bound, viết ví dụ đếm số dòng trong tất cả các tệp ".java" và tổng kết best practices.
    Có sẵn
  • Chia nhỏ tệp lớn thành các đoạn

    JAVA 25 SELF
    Cấp độ 59,Bài học 3
    Cách tăng tốc xử lý các tệp kích thước gigabyte: chia chúng thành các chunk (chunking), sử dụng truy cập theo vị trí qua FileChannel và bộ đệm memory-mapped MappedByteBuffer, chạy song song với ExecutorService. Cùng tìm hiểu các phương thức chính của I/O theo vị trí: position(...), read(...), write(...), tiêu chí chọn kích thước chunk, ví dụ đếm từ song song và các lỗi thường gặp (ranh giới chunk, tài nguyên, số lượng luồng).
    Có sẵn
  • Pipeline xử lý tệp: producer–consumer

    JAVA 25 SELF
    Cấp độ 59,Bài học 4
    Phân tích cách tổ chức pipeline xử lý tệp theo mẫu Producer–Consumer với trao đổi an toàn qua BlockingQueue (ví dụ, ArrayBlockingQueue), cách các thao tác chặn put() và take() hoạt động, vì sao cần cơ chế backpressure và cách kết thúc luồng đúng đắn bằng “poison pill” (ví dụ, "__END__", chứ không phải null). Khởi chạy các consumer qua ExecutorService, thêm trực quan hóa pipeline và phân tích các lỗi thường gặp.
    Có sẵn
  • Giới thiệu về mô-đun: để làm gì

    JAVA 25 SELF
    Cấp độ 60,Bài học 0
    Cùng tìm hiểu vì sao Java 9 đưa vào hệ thống mô-đun JPMS: “classpath-party” tệ ở chỗ nào, cách mô-đun đặt ra ranh giới phạm vi ở cấp độ container, module-info.java là gì và cách làm việc với các chỉ thị module, exports, requires, opens, uses/ provides. Chúng ta sẽ bàn về lợi ích (tính đóng gói, phụ thuộc tường minh, bảo mật, jlink), các trường hợp sử dụng (gồm cả java.base, java.sql), những lưu ý hữu ích và lỗi thường gặp khi di trú (quên exports, thiếu requires, trùng tên mô-đun).
    Có sẵn
  • 1
  • ...
  • 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á
  • 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