
Kotlin Coroutines Là Gì?
Kotlin Coroutines là tính năng cốt lõi của ngôn ngữ lập trình Kotlin, cho phép lập trình bất đồng bộ (asynchronous) theo kiểu tuần tự (sequential) mà không cần callback phức tạp. Coroutines được thiết kế để xử lý các tác vụ I/O, network call, database query và xử lý song song một cách nhẹ nhàng và có cấu trúc. Kotlin từ phiên bản 1.3 đã đưa Coroutines vào ổn định và hiện là tiêu chuẩn cho lập trình bất đồng bộ trên JVM.
Khác với thread truyền thống (mỗi thread tiêu tốn ~1MB stack memory), coroutine là lightweight, có thể tạo hàng trăm nghìn coroutine cùng lúc với chi phí bộ nhớ rất thấp. Mỗi coroutine chạy trên thread pool và được quản lý bởi Dispatcher.

Các Khái Niệm Cơ Bản
Suspend Functions
Suspend function là hàm có thể tạm dừng (suspend) thực thi mà không chặn thread, sau đó tiếp tục khi kết quả sẵn sàng. Đây là nền tảng của lập trình bất đồng bộ trong Kotlin:
- Suspend function chỉ có thể gọi từ coroutine hoặc suspend function khác
- Đánh dấu bằng từ khóa
suspendtrước tên hàm - Có thể thực hiện network call, database query, hoặc bất kỳ tác vụ nào không đồng bộ
Coroutine Builder
Kotlin cung cấp các hàm khởi tạo coroutine chính:
- launch: Khởi chạy coroutine không trả về kết quả, dùng cho tác vụ fire-and-forget
- async: Khởi chạy coroutine trả về Deferred<T>, dùng cho tác vụ cần kết quả
- runBlocking: Khởi chạy coroutine và chặn thread hiện tại cho đến khi hoàn thành, thường dùng trong main
Structured Concurrency
Structured concurrency đảm bảo rằng coroutine con luôn gắn liền với lifecycle của coroutine cha. Nếu cha bị hủy, tất cả con cũng bị hủy, tránh rò rỉ bộ nhớ và tác vụ treo. Tài liệu Kotlin giải thích chi tiết về Scope và Job hierarchy.
Coroutine Dispatchers
Dispatcher xác định thread mà coroutine chạy trên:
- Dispatchers.Main: Chạy trên thread UI (Android) hoặc hiện tại (Desktop). Dùng cho cập nhật giao diện.
- Dispatchers.IO: Thread pool tối ưu cho tác vụ I/O (network, database, file). Có kích thước pool = số lõi CPU.
- Dispatchers.Default: Thread pool cho tác vụ CPU-intensive (sort, map, compute). Kích thước = số lõi CPU.
- Dispatchers.Unconfined: Chạy trên thread hiện tại cho đến khi suspend, sau đó resume trên thread phù hợp.

Flow: Lập Trinh Phản Xạ Với Coroutines
Flow là API lập trình phản xạ (reactive) dựa trên coroutines, thay thế cho RxJava trong hầu hết trường hợp. Flow phát ra giá trị theo thời gian (cold stream) và tích hợp liền mạch với các toán tử coroutine.
Các toán tử Flow cơ bản:
- collect: Thu thập và xử lý từng giá trị phát ra từ Flow
- map / filter / transform: Biến đổi và lọc giá trị
- combine / zip / merge: Kết hợp nhiều Flow
- stateIn / shareIn: Chia sẻ Flow hot giữa nhiều collector
- debounce / throttleFirst: Kiểm soát tốc độ phát giá trị
Flow đặc biệt hữu ích cho UI state management trên Android, real-time data sync, và event streaming trong backend.
Thực Hành Trên Android
Trên Android, Coroutines là cách tiếp cận chuẩn cho lập trình bất đồng bộ:
- ViewModel: Sử dụng
viewModelScope.launchđể thực hiện network call, tự động hủy khi ViewModel bị hủy - Room Database: Hỗ trợ suspend function trực tiếp cho query bất đồng bộ
- Retrofit: Interface định nghĩa suspend function cho API calls
- Jetpack Compose: Lấy state từ Flow trong Composable với
collectAsStateWithLifecycle()
Android Docs khuyến nghị Coroutines thay thế AsyncTask và Loaders.
Thực Hành Trên Backend (Spring Boot)
Kotlin Coroutines cũng mạnh mẽ trên backend Spring Boot:
- Spring WebFlux: Hỗ trợ Kotlin coroutines với
@RestControllerdùng suspend functions - R2DBC: Truy cập database bất đồng bộ với Coroutines
- Ktor: Framework backend Kotlin native hỗ trợ coroutines từ đầu
- Multi-platform: Kotlin Multiplatform cho phép chia sẻ code bất đồng bộ giữa Android và backend
Spring Boot 3.x tích hợp sâu coroutines, cho phép viết endpoint REST theo kiểu đồng bộ nhưng chạy bất đồng bộ bên trong:
@RestController
class UserController {
@GetMapping("/users/{id}")
suspend fun getUser(@PathVariable id: String): User {
return userService.findById(id) // Không block thread
}
}
Xử Lý Lỗi Với Coroutines
Coroutines cung cấp nhiều cơ chế xử lý lỗi:
- try-catch: Bao bọc suspend function trong try-catch như code đồng bộ
- CoroutineExceptionHandler: Xử lý ngoại lệ toàn cục cho coroutine launched với launch
- SupervisorJob: Coroutine con lỗi không ảnh hưởng đến coroutine anh em
- Channel: Truyền lỗi giữa producer-consumer coroutines
Kết Luận
Kotlin Coroutines là công cụ thiết yếu cho lập trình viên hiện đại. Với structured concurrency, Flow, và sự tích hợp sâu vào Android và Spring Boot, Coroutines giúp viết code bất đồng bộ đơn giản, an toàn và dễ bảo trì. Khi kết hợp với các tính năng khác của Kotlin như null safety và extension functions, Coroutines tạo nên nền tảng vững chắc cho phát triển ứng dụng đa nền tảng.
Để bắt đầu, Coroutines Guide từ trang chính thức Kotlin là tài liệu tham khảo tốt nhất.
