java定时器停止_java 定时器中任务的启动、停止、再启动

本文详细解析了Java中的定时器管理,包括如何启动定时任务、取消任务以及重新启动。通过示例展示了TimerTask类和Timer类的cancel()方法的不同效果,解释了在特定情况下Timer类的cancel()方法可能无法立即停止所有任务的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.cvicse.ump.timer.service;

import java.util.Date;

import java.util.Timer;

import com.cvicse.ump.timer.task.TimTaskTest;

/**

* 定时任务管理器

* @author dyh

*

*/

public class TimerManager {

/**

* 单例模式

*/

private static TimerManager timerManager = null;

private TimerManager(){}

public static TimerManager getInstance(){

if(timerManager == null){

timerManager = new TimerManager();

}

return timerManager;

}

/**

* 定时器

*/

private Timer timer = new Timer("homePageTimer");

/**

* 定时任务

*/

private TimTaskTest timerTask = null;

/**

* 启动定时任务

*/

public void startTimerTask(){

timer.purge();

if(timerTask==null){

timerTask = new TimTaskTest();

}

timer.schedule(timerTask, new Date(), 5000);

}

/**

* 定时任务取消

*/

public void stopTimerTask(){

timerTask.cancel();

timerTask = null;//如果不重新new,会报异常

}

}

TimerTask类和Timer类的cancel()方法详解

无论是TimerTask类还是Timer类,其cancel()方法都是为了清除任务队列中的任务。

虽然都是清除任务队列中的任务,却有一些不同:TimerTask类中的cancel()方法侧重的是将自身从任务队列中清除,其他任务不受影响,而Timer类中的cancel()方法则是将任务队列中全部的任务清空。

下面以具体示例进行演示。

TimerTask类中的cancel()方法测试:

import java.util.Calendar;

import java.util.Date;

import java.util.Timer;

import java.util.TimerTask;

public class Test {

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

System.out.println("当前时间为:" + new Date());

Calendar c = Calendar.getInstance();

Date runDate1 = c.getTime();

System.out.println("计划时间为:" + runDate1);

MyTaskA task1 = new MyTaskA();

MyTaskB task2 = new MyTaskB();

Timer timer = new Timer();

timer.schedule(task1, runDate1, 4000);

timer.schedule(task2, runDate1, 4000);

}

}

class MyTaskA extends TimerTask {

@Override

public void run() {

System.out.println("A run timer=" + new Date());

this.cancel();// 调用的是TimerTask类中的cancel()方法

System.out.println("A任务自己移除自己,B任务不受影响,继续运行");

}

}

class MyTaskB extends TimerTask {

@Override

public void run() {

System.out.println("B run timer=" + new Date());

}

}

Timer类中的cancel()方法测试:

import java.util.Calendar;

import java.util.Date;

import java.util.Timer;

import java.util.TimerTask;

public class Test {

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

System.out.println("当前时间为:" + new Date());

Calendar c = Calendar.getInstance();

Date runDate1 = c.getTime();

System.out.println("计划时间为:" + runDate1);

MyTaskA task1 = new MyTaskA();

MyTaskB task2 = new MyTaskB();

Timer timer = new Timer();

timer.schedule(task1, runDate1, 4000);

timer.schedule(task2, runDate1, 4000);

Thread.sleep(12000);

timer.cancel();

System.out.println("A、B任务都移除了");

}

}

class MyTaskA extends TimerTask {

@Override

public void run() {

System.out.println("A run timer=" + new Date());

}

}

class MyTaskB extends TimerTask {

@Override

public void run() {

System.out.println("B run timer=" + new Date());

}

}

**注意:**Timer类中的cancel()方法有时不一定会停止计划任务,而是正常执行。

在Java应用中通过SparkLauncher启动Spark任务

本博客内容基于Spark2.2版本,在阅读文章并想实际操作前,请确保你有: 一台配置好Spark和yarn的服务器 支持正常spark-submit --master yarn xxxx的任务提交 老 ...

Linux Systemd——在RHEL/CentOS 7中启动/停止/重启服务

RHEL/CentOS 7.0中一个最主要的改变,就是切换到了systemd.它用于替代红帽企业版Linux前任版本中的SysV和Upstart,对系统和服务进行管理.systemd兼容SysV和Li ...

在CentOS 7中启动/停止/重启服务

RHEL/CentOS 7.0中一个最主要的改变,就是切换到了systemd.它用于替代红帽企业版Linux前任版本中的SysV和Upstart,对系统和服务进行管理.systemd兼容SysV和Li ...

java swing中Timer类的学习

最近在完成学校课程的java平时作业,要实现一个计时器,包含开始.暂停以及重置三个功能.由于老师规定要用这个timer类,也就去学习了一下,顺便记录一下. 首先呢去查了一下java手册上的东西,发现t ...

java定时器实现总结

前言:Java定时器目前主要有3种实现方式:JDK组件,Spring Task,Quartz框架. 1. JDK组件(1) java.util.TimerTask MyTimerTask.java: ...

SpringBoot项目快速启动停止脚本

SpringBoot项目快速启动停止脚本 1.在jar包同级目录下,创建 app.sh #!/bin/bash appName=`ls|grep .jar$` if [ -z $appName ] t ...

关于 Java(TM) Platform SE binary 已停止工作 的解决方法

一.问题描述 昨天晚上Myeclipse还用着好好的,今天早上打开工程,只要运行就卡住,大半天弹出个消息窗口:Java(TM) Platform SE binary 已停止工作. 如图 关闭Myecl ...

spring项目中如何添加定时器以及在定时器中自动生成sprng注入对象

最近做了一个java的项目,部门领导给了一套代码让我尽快掌握,说心里话本人真心不喜欢java的这种项目方式,各种配置各种xml文件简直头都大了,下面就将我遇到的其中一个我认为是坑的地方整理出来,希望能 ...

随机推荐

一行R代码来实现繁琐的可视化

ggfortify 有着简单易用的统一的界面来用一行代码来对许多受欢迎的R软件包结果进行二维可视化的一个R工具包.这让许多的统计学家以及数据科学家省去了许多繁琐和重复的过程,不用对结果进行任何处理就能 ...

CCNA网络基础(一)

现在我们使用这一个图来讲解网络的基础知识:     现在只看右边那个图,也就是两台主机和一个交换机       PC1 的配置是      IP 172.16.20.2/24   网关没有配     ...

Java 读取Properties配置文件

1.img_url.properties imgurl=http://10.1.19.65:8090 2.Test.java InputStream inputStream = this.getCla ...

Opencv中在图片上显示文本

1.cvPutText函数(在图像中加入文本) void cvPutText( CvArr* img, const char* text, CvPoint org, const CvFont* fon ...

98、EditText 按键盘查询 触发事件

只需要在XML在输入框中加入Android:imeOptions=”actionSearch”,调用软键盘时,回车键就会显示搜索二字. editSearch.setOnEditorActionList ...

CSS基础知识学习笔记

1.css基本样式讲解 1.1 css背景background-attachment:背景图像是否固定或者随着页面的其余部分滚动background-color:设置元素的背景颜色background ...

JavaScript and html的关系

HTML--------------------------->DOM, BOM, Event Request/Response------------->Ajax 日期处理 http:/ ...

linux上查找文件存放地点和文件中查找字符串方法

一.查找文件存放地点 1.locate 语法:locate  locate命令实际是"find -name"的另一种写法,但是查找方式跟find不同 ...

简单 php 代码跟踪调试实现

简单 php 代码跟踪调试实现 debug_backtrace:生成回溯 debug_print_backtrace:打印回溯 1. debug_backtrace ($options = DEBUG ...

Deepin debian安装Libreoffice

Libreoffice LibreOffice 是一款功能强大的办公软件,默认使用开放文档格式 (OpenDocument Format , ODF), 并支持 .docx, .xlsx, *.ppt ...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值