Đã lên lịch

java.util.concurrent.SchedisedThreadPoolExecutor là một lớp con của ThreadPoolExecutor và cũng có thể lên lịch các lệnh để chạy sau một độ trễ nhất định hoặc thực thi định kỳ.

Các phương thức SchedisedThreadPoolExecutor

Sr.No. Phương pháp & Mô tả
1

protected <V> RunnableScheduledFuture<V> decorateTask(Callable<V> callable, RunnableScheduledFuture<V> task)

Sửa đổi hoặc thay thế tác vụ được sử dụng để thực thi một lệnh có thể gọi.

2

protected <V> RunnableScheduledFuture<V> decorateTask(Runnable runnable, RunnableScheduledFuture<V> task)

Sửa đổi hoặc thay thế tác vụ được sử dụng để thực thi có thể chạy được.

3

void execute(Runnable command)

Thực hiện lệnh với độ trễ yêu cầu bằng không.

4

boolean getContinueExistingPeriodicTasksAfterShutdownPolicy()

Nhận chính sách về việc có tiếp tục thực hiện các tác vụ định kỳ hiện có ngay cả khi trình thực thi này đã tắt hay không.

5

boolean getExecuteExistingDelayedTasksAfterShutdownPolicy()

Nhận chính sách về việc có thực thi các tác vụ bị trì hoãn hiện có ngay cả khi trình thực thi này đã bị tắt hay không.

6

BlockingQueue<Runnable> getQueue()

Trả về hàng đợi tác vụ được sử dụng bởi trình thực thi này.

7

boolean getRemoveOnCancelPolicy()

Nhận chính sách về việc liệu các tác vụ đã hủy có được xóa ngay lập tức khỏi hàng đợi công việc tại thời điểm hủy hay không.

số 8

<V> ScheduledFuture<V> schedule(Callable<V> callable, long delay, TimeUnit unit)

Tạo và thực thi một SchedonedFuture được bật sau độ trễ nhất định.

9

ScheduledFuture<?> schedule(Runnable command, long delay, TimeUnit unit)

Tạo và thực hiện hành động một lần được bật sau độ trễ nhất định.

10

ScheduledFuture<?> scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit)

Tạo và thực hiện một hành động định kỳ được kích hoạt đầu tiên sau độ trễ ban đầu nhất định và sau đó với khoảng thời gian nhất định; nghĩa là các quá trình thực thi sẽ bắt đầu sau thời gian ban đầu (InitialDelay) rồi đến thời gian ban đầu + thời gian, sau đó giai đoạn ban đầu + thời gian 2 *, v.v.

11

ScheduledFuture<?> scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit)

Tạo và thực hiện một hành động định kỳ được kích hoạt đầu tiên sau độ trễ ban đầu nhất định và sau đó với độ trễ nhất định giữa việc kết thúc một lần thực hiện và bắt đầu lần tiếp theo.

12

void setContinueExistingPeriodicTasksAfterShutdownPolicy (boolean value)

Đặt chính sách về việc có tiếp tục thực hiện các tác vụ định kỳ hiện có ngay cả khi trình thực thi này đã tắt hay không.

13

void setExecuteExistingDelayedTasksAfterShutdownPolicy (boolean value)

Đặt chính sách về việc có thực thi các tác vụ bị trì hoãn hiện tại hay không ngay cả khi trình thực thi này đã bị tắt.

14

void setRemoveOnCancelPolicy(boolean value)

Đặt chính sách về việc liệu các nhiệm vụ đã hủy có được xóa ngay lập tức khỏi hàng đợi công việc tại thời điểm hủy hay không.

15

void shutdown()

Bắt đầu tắt theo thứ tự trong đó các nhiệm vụ đã gửi trước đó được thực thi, nhưng không có nhiệm vụ mới nào được chấp nhận.

16

List<Runnable> shutdownNow()

Cố gắng dừng tất cả các tác vụ đang thực thi, tạm dừng xử lý các tác vụ đang chờ và trả về danh sách các tác vụ đang chờ thực thi.

17

<T> Future<T> submit(Callable<T> task)

Gửi một nhiệm vụ trả về giá trị để thực hiện và trả về Tương lai đại diện cho các kết quả đang chờ xử lý của nhiệm vụ.

18

Future<?> submit(Runnable task)

Gửi một tác vụ Runnable để thực thi và trả về Tương lai đại diện cho tác vụ đó.

19

<T> Future<T> submit(Runnable task, T result)

Gửi một tác vụ Runnable để thực thi và trả về Tương lai đại diện cho tác vụ đó.

Thí dụ

Chương trình TestThread sau đây cho thấy cách sử dụng giao diện SchedisedThreadPoolExecutor trong môi trường dựa trên luồng.

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;

public class TestThread {

   public static void main(final String[] arguments) throws InterruptedException {
      final ScheduledThreadPoolExecutor scheduler = 
         (ScheduledThreadPoolExecutor)Executors.newScheduledThreadPool(1);

      final ScheduledFuture<?> beepHandler = 
         scheduler.scheduleAtFixedRate(new BeepTask(), 2, 2, TimeUnit.SECONDS);

      scheduler.schedule(new Runnable() {

         @Override
         public void run() {
            beepHandler.cancel(true);
            scheduler.shutdown();			
         }
      }, 10, TimeUnit.SECONDS);
   }  

   static class BeepTask implements Runnable {
      
      public void run() {
         System.out.println("beep");      
      }
   }
}

Điều này sẽ tạo ra kết quả sau.

Đầu ra

beep
beep
beep
beep