Java: Thread Pool

Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực

Đa số việc triển khai bộ thực thi trong java.util.concurrent đều sử dụng thread pool, trong đó bao gồm các worker thread. Loại luồng này sẽ đề tồn tại riêng rẽ với các tác vụ Runnable và Callable mà nó thực hiện và thường được sử dụng để thực hiện nhiều nhiệm vụ.

Sử dụng worker thread sẽ giảm thiểu chi phí do khi tạo luồng. Các đối tượng luồng sử dụng một lượng đáng kể bộ nhớ, và trong ứng dụng quy mô lớn thì việc phân bổ và thu hồi nhiều đối tượng luồng sẽ phát sinh chi phí quản lý bộ nhớ đáng kể.

Một trong những loại thread phổ biến là fixed thread pool. Đây là loại luôn có một số xác định các luồng hoạt động; nếu một luồng được chấm dứt bằng cách nào đó trong khi nó vẫn đang được sử dụng, thì nó sẽ tự động được thay thế bằng một luồng mới. Khi đó các tác vụ sẽ được gửi đến các pool qua một hàng đợi bên trong để giữ nhiệm vụ thêm bất cứ khi nào có nhiệm vụ tích cực hơn so với luồng.

Một lợi thế quan trọng của fix thread pool là các ứng dụng sử dụng nó sẽ dẫn đến hiện tượng suy giảm mềm. Để hiểu điều này, ta hãy xét một ứng dụng máy chủ web nơi mỗi yêu cầu HTTP được xử lý bởi một luồng riêng. Nếu ứng dụng đơn giản là tạo ra một luồng mới cho mọi yêu cầu HTTP mới, và hệ thống nhận được nhiều yêu cầu hơn thì nó có thể xử lý ngay lập tức, và các ứng dụng sẽ đột nhiên ngừng đáp ứng tất cả các yêu cầu khi chi phí của tất cả các luồng vượt quá khả năng của hệ thống. Với một giới hạn về số lượng các luồng có thể được tạo ra, các ứng dụng sẽ không được phục vụ các yêu cầu HTTP một cách nhanh chóng khi chúng tới, nhưng nó sẽ phục vụ chúng một cách nhanh chóng để hệ thống có thể duy trì.

Một cách đơn giản để tạo ra một bộ thực thi có sử dụng một fix thread pool là gọi phương thức sản xuất newFixedThreadPool() lớp java.util.concurrent.Executors. Lớp này cũng cung cấp các phương thức sản xuất sau đây:

  • Phương thức newCachedThreadPool() tạo ra một bộ thực thi với một thread pool mở rộng. Bộ thực thi này thích hợp cho các ứng dụng tạo nhiều tác vụ ngắn.
  • Phương thức newSingleThreadExecutor() tạo ra một bộ thực thi, bộ thực thi này sẽ thực hiện một tác vụ duy nhất tại một thời điểm.
  • Một số phương thức sản xuất là các phiên bản ScheduledExecutorService của các bộ thực thi ở trên.

Nếu các phương thức trên không cung cấp được các bộ thực thi đáp ứng nhu cầu của bạn thì bạn xây dựng các thể hiện của các lớp java.util.concurrent.ThreadPoolExecutor hoặc java.util.concurrent.ScheduledThreadPoolExecutor, chúng sẽ cung cấp cho bạn những tùy chọn bổ sung.

» Tiếp: Framwork Fork/Join
« Trước: Giao diện (interface) Executor
Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực
Copied !!!