Рубрики
Без рубрики

Примеры Java ScheduledExecutorService по расписанию

– Примеры Java ScheduledExecutorService по расписанию

В Java мы можем использовать ScheduledExecutorService для периодического или однократного выполнения задачи после предопределенной задержки TimeUnit .

1. Запустите задачу Один раз

ScheduledExecutorService принимает оба Выполнимые и Вызываемые задачи.

1.1 Запустите Выполнимая задача после начальной задержки в 5 секунд.

package com.mkyong.concurrency.executor.scheduler;

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

public class ScheduledExecutorRunnable {

    public static void main(String[] args) {

        ScheduledExecutorService ses = Executors.newScheduledThreadPool(1);

        Runnable task2 = () -> System.out.println("Running task2...");

        task1();

        //run this task after 5 seconds, nonblock for task3
        ses.schedule(task2, 5, TimeUnit.SECONDS);

        task3();

        ses.shutdown();

    }

    public static void task1() {
        System.out.println("Running task1...");
    }

    public static void task3() {
        System.out.println("Running task3...");
    }

}

Выход

Running task1...
Running task3...
Running task2... //display after 5 seconds

1.2 Запустите Вызываемую задачу после 5 секунд начальной задержки.

package com.mkyong.concurrency.executor.scheduler;

import java.util.concurrent.*;

public class ScheduledExecutorCallable {

    public static void main(String[] args) throws InterruptedException, ExecutionException {

        ScheduledExecutorService ses = Executors.newScheduledThreadPool(1);

        Callable task2 = () -> 10;

        task1();

        //run this task after 5 seconds, nonblock for task3, returns a future
        ScheduledFuture schedule = ses.schedule(task2, 5, TimeUnit.SECONDS);

        task3();

        // block and get the result
        System.out.println(schedule.get());

        System.out.println("shutdown!");

        ses.shutdown();

    }

    public static void task1() {
        System.out.println("Running task1...");
    }

    public static void task3() {
        System.out.println("Running task3...");
    }

}

Выход

Running task1...
Running task3...
10					//display after 5 seconds
shutdown!

2. Периодически выполняйте задачу

Для периодического выполнения задачи используется scheduleAtFixedRate

2.1 Запустите Запускаемая задача каждые 1 секунду, после 5 секунд начальной задержки.

package com.mkyong.concurrency.executor.scheduler;

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

public class ScheduledExecutorRepeat {

    private static int count = 0;

    public static void main(String[] args) throws InterruptedException {

        ScheduledExecutorService ses = Executors.newScheduledThreadPool(1);

        Runnable task1 = () -> {
            count++;
            System.out.println("Running...task1 - count : " + count);
        };

        // init Delay = 5, repeat the task every 1 second
        ScheduledFuture scheduledFuture = ses.scheduleAtFixedRate(task1, 5, 1, TimeUnit.SECONDS);

        while (true) {
            System.out.println("count :" + count);
            Thread.sleep(1000);
            if (count == 5) {
                System.out.println("Count is 5, cancel the scheduledFuture!");
                scheduledFuture.cancel(true);
                ses.shutdown();
                break;
            }
        }

    }
}

Выход

count :0
count :0
count :0
count :0
count :0
Running...task1 - count : 1
count :1
Running...task1 - count : 2
count :2
Running...task1 - count : 3
count :3
Running...task1 - count : 4
count :4
Running...task1 - count : 5
Count is 5, cancel the scheduledFuture!

Скачать Исходный Код

Рекомендации

  1. Запланированный javadoc для службы ExecutorService

Оригинал: “https://mkyong.com/java/java-scheduledexecutorservice-examples/”