Java Timer停止的正确姿势:详解停止Timer任务和Timer对象的技巧与实例

在Java中,Timer和TimerTask是用于安排在将来的某个时间点执行任务的工具。然而,在实际应用中,有时候我们需要停止正在运行的TimerTask或者Timer对象。下面将详细介绍如何正确地停止Timer任务和Timer对象,并提供一些实例代码。

停止Timer任务

要停止一个TimerTask,最直接的方法是调用其cancel()方法。该方法将尝试停止正在执行的任务,并返回一个布尔值,指示任务是否被成功取消。

1. 停止正在执行的任务

以下是一个简单的例子,展示如何停止一个正在执行的任务:

import java.util.Timer;

import java.util.TimerTask;

public class TimerExample {

public static void main(String[] args) {

Timer timer = new Timer();

TimerTask task = new TimerTask() {

@Override

public void run() {

System.out.println("Task is running...");

// 假设任务需要执行很长时间

try {

Thread.sleep(5000);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

};

// 安排任务在5秒后执行

timer.schedule(task, 5000);

// 假设我们在任务开始后2秒停止它

try {

Thread.sleep(2000);

} catch (InterruptedException e) {

e.printStackTrace();

}

// 停止任务

boolean isCancelled = task.cancel();

System.out.println("Task cancelled: " + isCancelled);

}

}

在这个例子中,TimerTask在5秒后被安排执行,但是在执行了2秒后被停止。task.cancel()返回true,表示任务被成功取消。

2. 停止尚未执行的任务

如果任务尚未开始执行,cancel()方法同样可以停止它:

// 假设任务已经被安排,但是尚未开始执行

boolean isCancelled = task.cancel();

System.out.println("Task cancelled before execution: " + isCancelled);

停止Timer对象

Timer对象本身并没有直接的停止方法,但是可以通过调用cancel()方法来停止所有安排的任务。这会导致Timer对象不再安排任何新的任务,并且Timer线程将最终结束。

停止Timer对象

以下是如何停止Timer对象的示例:

import java.util.Timer;

import java.util.TimerTask;

public class TimerExample {

public static void main(String[] args) {

Timer timer = new Timer();

TimerTask task = new TimerTask() {

@Override

public void run() {

System.out.println("Task is running...");

// 假设任务需要执行很长时间

try {

Thread.sleep(5000);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

};

// 安排任务在5秒后执行

timer.schedule(task, 5000);

// 停止Timer对象

timer.cancel();

System.out.println("Timer cancelled.");

}

}

在这个例子中,Timer对象在任务开始执行之前被停止,因此任务将不会执行。

总结

在Java中,停止Timer任务和Timer对象是常见的需求。通过使用TimerTask的cancel()方法和Timer的cancel()方法,可以有效地停止任务和Timer对象。在编写代码时,应确保在适当的时候调用这些方法,以避免不必要的资源浪费和潜在的问题。