Java: 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

Trong những ví dụ của các bài viết trên, có một kết nối đóng giữa tác vụ được thực thi bởi một luồng mới được định nghĩa bởi đối tượng Runnable của nó, và bản thân luồng đó được định nghĩa bởi đối tượng Thread. Những công việc này rất phù với đối với những ứng dụng nhỏ, nhưng với những ứng dụng có tầm cỡ thì nó dẫn dẫn sự phân tách giữa việc quán lý luồng và việc tạo phần còn lại của ứng dụng. Các đối tượng đóng gói những chức năng này được gọi là bộ thực thi. Dưới đây là những mô tả chi tiết cho bộ thực thi.

Giao diện Executor

Gói java.util.concurrent định nghĩa ba giao diện bộ thực thi như sau:

  • Executor, một giao diện đơn giản để hỗ trợ khởi tạo tác vụ mới.
  • ExecutorService, giao diện có của Executor có thêm tính năng giúp quản lý vòng đời, bao gồm các tác vụ cá nhân và bộ thực thi của chính nó.
  • ScheduledExecutorService, một giao diện con của ExecutorService, hỗ trợ trong tương lai và/hoặc thực hiện định kỳ các tác vụ.

Thông thường, các biến tham chiếu đến đối tượng Executor được khai báo là một trong ba loại giao diện trên mà không phải với kiểu lớp thực thi.

Executor

Giao diện (interface) Executor cung cấp một phương thức duy nhất là execute() được thiết kế để thay thế cho việc tạo luồng. Nếu r là một đối tượng Runnable và e là một đối tượng Executor thì bạn có thể thay thế

(new Thread(r)).start();

bằng

e.execute(r);

Tuy nhiên, sự định nghĩa của phương thức execute() không có tính cụ thể cao. Các thành ngữ cấp thấp tạo ra một luồng mới và khởi chạy nó ngay lập tức. Tùy thuộc vào sự thực thi Executor, phương thức execute() có thể làm điều tương tự, nhưng có nhiều khả năng sử dụng một luồng worker để chạy r, hoặc đặt r trong một hàng đợi để chờ cho một luồng worker.

Bộ thực thi sẽ thi hành trong gói java.util.concurrent được thiết kế để sử dụng đầy đủ các giao diện tiên tiến hơn là ExecutorService và ScheduledExecutorService, mặc dù chúng cũng làm việc với các giao diện cơ sở Executor.

Giao diện ExecutorService

Giao diện ExecutorService bổ sung phương thức execute() cũng khá tương tự, nhưng linh hoạt hơn phương thức submit(). Cũng giống như execute(), phương thức submit() chấp nhận đối tượng Runnable, nhưng nó cũng chấp nhận đối tượng Callable, trong đó cho phép trả lại một giá trị. Phương thức submit() trả về đối tượng Future, được sử dụng để lấy giá trị trả về là Callable để quản lý tình trạng của cả hai tác vụ Callable và Runnable.

ExecutorService cũng cung cấp phương thức để gửi được nhiều đối tượng Callable. Cuối cùng ExecutorService cung cấp một số phương thức để quản lý việc tắt bộ thực thi. Để hỗ trợ việc tắt tức thì thì các tác vụ này cần xử lý ngắt một cách chính xác.

Giao diện ScheduledExecutorService

Giao diện ScheduledExecutorService bổ sung các phương thức của cha của nó ExecutorService là schedule(), phương thức này thực hiện một tác vụ Runnable hoặc Callable sau mỗi độ trễ nhất định. Ngoài ra, nó cũng định nghĩa scheduleAtFixedRate và scheduleWithFixedDelay, dùng để thực hiện các nhiệm vụ lặp lại nhiều lần, trong khoảng thời gian xác định.

» Tiếp: Thread Pool
« Trước: Đối tượng Lock
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 !!!