CodeGym/Khóa học Java/Mô-đun 2: Lõi Java/phương thức mớiScheduledThreadPool

phương thức mớiScheduledThreadPool

Có sẵn

Một loại nhóm nhiệm vụ khác là nhóm nhiệm vụ theo lịch trình. Đánh giá theo tên, chúng tôi có thể giả định rằng chúng tôi sử dụng loại này để lên lịch khi một tác vụ cụ thể sẽ được khởi chạy.

Loại dịch vụ này hữu ích khi chúng tôi có nhiệm vụ khởi chạy một hoạt động sau một thời gian đã trôi qua hoặc chúng tôi muốn lên lịch cho một nhiệm vụ định kỳ.

Để sử dụng một, chúng tôi gọi Executors.newScheduledThreadPool(1) .

Chúng ta sẽ nói về các tham số một lát sau. Nhưng bây giờ, điều chúng ta cần biết là khi phương thức này được gọi, chúng ta sẽ nhận được một đối tượng ScheduledExecutorService .

ScheduledExecutorService là một giao diện mở rộng ExecutorService .

Các phương thức sau xuất hiện trong giao diện này:

Phương pháp Giải trình
ScheduledFuture<?>
schedule(Runnable command,
                                  long delay, TimeUnit unit);
Tạo và thực thi hành động một lần chạy sau độ trễ đã chỉ định.
<V> ScheduledFuture<V>
schedule(Callable<V> callable,
                                      long delay, TimeUnit unit);
Tạo và thực hiện mộtDự kiếnTương laiđối tượng thực thi sau một độ trễ xác định.
ScheduledFuture<?>
scheduleAtFixedRate(Runnable command,
                                             long initialDelay,
                                             long period,
                                             TimeUnit unit);
Tạo và thực hiện một hành động định kỳ chạy đầu tiên sau độ trễ ban đầu đã chỉ định và sau đó chạy lại sau khoảng thời gian đã chỉ định. Nói cách khác, quá trình thực thi sẽ bắt đầu sau initDelay , rồi initDelay + period , sau đó initDelay + 2 * period , v.v.
ScheduledFuture<?> scheduleWithFixedDelay(Runnable command,
                                                long initialDelay,
                                                long delay,
                                                TimeUnit unit);
Tạo và thực thi một hành động định kỳ thực hiện trước sau độ trễ ban đầu đã chỉ định, sau đó thực hiện lại với độ trễ đã chỉ định giữa khi hoàn thành một lần thực hiện và bắt đầu lần thực hiện tiếp theo.

Vì vậy, giao diện cho phép chúng tôi chạy các tác vụ đều đặn hoặc sau một thời gian trễ.

Tìm hiểu thêm về phương pháp newScheduledThreadPool.

Chúng ta có thể gọi nó theo nhiều cách:

newScheduledThreadPool(int corePoolSize)
corePoolSize là số luồng cần giữ trong nhóm, ngay cả khi chúng không hoạt động.
newScheduledThreadPool(int corePoolSize, ThreadFactory threadFactory)

corePoolSize là số luồng cần giữ trong nhóm, ngay cả khi chúng không hoạt động.

threadFactory là nhà máy để sử dụng khi tạo chủ đề mới.

Cả hai phương pháp sẽ tạo một nhóm luồng có thể lên lịch các hành động để thực thi sau một khoảng thời gian trễ được chỉ định hoặc theo định kỳ.

Hãy xem một ví dụ để xem cách hoạt động của ScheduledThreadPool .

Ví dụ: giả sử chúng tôi có nhiệm vụ kiểm tra email cứ sau 5 giây, nhưng việc kiểm tra này không được ảnh hưởng đến chương trình chính và kéo theo khả năng tiêu thụ tài nguyên bổ sung.

Chúng tôi có một lớp nhiệm vụ mô phỏng việc kiểm tra email.

public class Task implements Runnable {
   @Override
   public void run() {
       System.out.println("Checking email...");
   }
}

Tiếp theo, chúng tôi tạo một nhóm luồng và lên lịch kiểm tra.

ScheduledExecutorService executorService = Executors.newScheduledThreadPool(2);
executorService.scheduleAtFixedRate(new Task(), 0, 5, TimeUnit.SECONDS);

Ở đầu ra, cứ sau 5 giây chúng ta lại thấy:

Đang kiểm tra email...

Nói chung, chúng ta có thể sử dụng một nhóm như vậy để thực hiện các nhiệm vụ "dọn phòng" định kỳ, như trong ví dụ. Nhiệm vụ vệ sinh là nhiệm vụ phải được thực hiện bất kể chương trình chính đang làm gì.

Bình luận
  • Phổ biến
  • Mới
Bạn phải đăng nhập để đăng nhận xet
Trang này chưa có bất kỳ bình luận nào