Java定时任务执行中断

1. 流程图

以下是实现Java定时任务执行中断的流程图:

gantt
	title Java定时任务执行中断流程图

	section 创建定时任务
	创建任务对象			:active, 2023-01-01, 1d
	设置任务执行时间		:active, 2023-01-02, 1d
	设置任务执行间隔时间	:active, 2023-01-03, 1d
	设置任务执行内容		:active, 2023-01-04, 1d
	启动定时任务			:active, 2023-01-05, 1d
	
	section 中断定时任务
	获取任务状态			:active, 2023-01-06, 1d
	判断任务是否在运行		:active, 2023-01-07, 1d
	中断任务				:active, 2023-01-08, 1d
	
	section 结束定时任务
	判断任务是否在运行		:active, 2023-01-09, 1d
	结束任务				:active, 2023-01-10, 1d

2. 实现步骤及代码示例

2.1 创建定时任务

首先,我们需要创建一个定时任务,包括定义任务的执行时间、执行间隔时间以及具体执行的内容。

import java.util.Timer;
import java.util.TimerTask;

public class MyTask extends TimerTask {

    @Override
    public void run() {
        // 执行任务的代码逻辑
        System.out.println("定时任务执行中...");
    }

    public static void main(String[] args) {
        Timer timer = new Timer();
        MyTask task = new MyTask();
        
        // 设置任务执行时间为当前时间延迟1秒
        long delay = 1000;
        // 设置任务执行间隔时间为1秒
        long period = 1000;
        
        // 启动定时任务,延迟1秒后开始执行,之后每隔1秒执行一次
        timer.schedule(task, delay, period);
    }
}

2.2 中断定时任务

在某些情况下,我们可能需要中断定时任务的执行,可以通过获取任务状态、判断任务是否在运行,并调用cancel()方法来中断任务。

import java.util.Timer;
import java.util.TimerTask;

public class MyTask extends TimerTask {
    private boolean isRunning = true;

    @Override
    public void run() {
        // 执行任务的代码逻辑
        System.out.println("定时任务执行中...");
        
        if (!isRunning) {
            // 如果任务被中断,则取消任务的执行
            cancel();
        }
    }

    public static void main(String[] args) {
        Timer timer = new Timer();
        MyTask task = new MyTask();
        
        // 设置任务执行时间为当前时间延迟1秒
        long delay = 1000;
        // 设置任务执行间隔时间为1秒
        long period = 1000;
        
        // 启动定时任务,延迟1秒后开始执行,之后每隔1秒执行一次
        timer.schedule(task, delay, period);
        
        // 中断任务的代码逻辑
        try {
            Thread.sleep(5000); // 延迟5秒中断任务
            task.isRunning = false; // 设置任务状态为不再运行
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

2.3 结束定时任务

除了中断定时任务,我们还可以通过判断任务是否在运行,并调用cancel()方法来结束任务的执行。

import java.util.Timer;
import java.util.TimerTask;

public class MyTask extends TimerTask {
    private boolean isRunning = true;

    @Override
    public void run() {
        // 执行任务的代码逻辑
        System.out.println("定时任务执行中...");
        
        if (!isRunning) {
            // 如果任务被中断,则取消任务的执行
            cancel();
        }
    }

    public static void main(String[] args) {
        Timer timer = new Timer();
        MyTask task = new MyTask();
        
        // 设置任务执行时间为当前时间延迟1秒
        long delay = 1000;
        // 设置任务执行间隔时间为1秒
        long period = 1000;
        
        // 启动定时任务,延迟1秒后开始执行,之后每隔1秒执行一次