java定时器

硅谷探秘者 2306 0 0

定时执行(一秒后执行)

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

/**
 * 定时器
 */
public class Main3 {
    public  static  void main(String args[]) {
        new Timer().schedule(new TimerTask() {
            @Override
            public void run() {
                System.out.println("执行");
            }
        },1000);
    }
}

定时执行,然后隔固定时间执行(一秒后执行,然后隔三秒执行)

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

/**
 * 定时器
 */
public class Main3 {
    public  static  void main(String args[]) {
        new Timer().schedule(new TimerTask() {
            @Override
            public void run() {
                System.out.println("执行");
            }
        },1000,3000);
    }
}



定时器案例:

package com.dzqc.model.common.util;

import java.util.HashMap;
import java.util.Map;
import java.util.Timer;
import java.util.TimerTask;
import java.util.UUID;
/**
 ** 定时任务管理器
 * @author Administrator
 *
 */
public class TaskManager {
	private static TaskManager taskManager = null;
	private Timer timer = new Timer("homePageTimer");
	
	/**
	 **单例模式
	 */
    private TaskManager(){}
    public static TaskManager getInstance(){
        if(taskManager == null){
        	taskManager = new TaskManager();
        }
        return taskManager;
    }
    
    /**
     **储存定时任务map
     */
    private static final Map<String,TimerTask> map=new HashMap<String,TimerTask>();
    
    /**
     * *是否包含该id的任务
     * @return
     */
    public boolean haveMe(String key) {
    	return map.containsKey(key);
    }
    
    /**
     * *关闭定时任务
     * @param taskId
     * @return
     */
    public boolean closeTimer(String taskId) {
    	if(!map.containsKey(taskId)) {
    		return false;
    	}else {
    		TimerTask task=map.get(taskId);
    		task.cancel();
    		map.remove(taskId);
    		return true;
    	}
    }
    
    
    /**
     * *启动定时任务
     * @param task 任务实例
     * @param time 时间
     */
    public String startTimerTask(TimerTask task,Long time){
    	String taskId=UUID.randomUUID().toString();
    	if(!map.containsKey(taskId)) {
    		timer.schedule(task, time);
    		map.put(taskId,task);
    		return taskId;
    	}else {
    		return null;
    	}
    }
}
package com.dzqc.model.common.controller;

import java.util.TimerTask;

import org.apache.log4j.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.dzqc.model.common.util.MyAjaxResult;
import com.dzqc.model.common.util.TaskManager;

@Controller
@RequestMapping("/test")
public class TestController {
	
	private static final Logger l=Logger.getLogger(TestController.class);
	
	//模拟保存id
	private String id;
	
	@RequestMapping("/test")
	@ResponseBody
	public MyAjaxResult test() {
		TaskManager t= TaskManager.getInstance();
		String taskId=t.startTimerTask(new TimerTask() {
			@Override
			public void run() {
				// TODO Auto-generated method stub
				l.info("任务执行");
				//数据库获取定时器id从map中清除任务
				t.closeTimer(id);
				l.info(t.haveMe(id));
			}
		},10000L);//十秒后执行任务
		//保存taskid
		id=taskId;
		return MyAjaxResult.success(taskId);
	}
	
	
	@RequestMapping("/close")
	@ResponseBody
	public MyAjaxResult test(String taskId) {
		if(taskId==null||"".equals(taskId)) {
			return MyAjaxResult.fail_300("taskId is null!");
		}
		TaskManager t= TaskManager.getInstance();
		boolean b=t.closeTimer(taskId);
		if(b) {
			l.info("关闭定时任务");
			l.info(t.haveMe(id));
			return MyAjaxResult.success("关闭定时任务成功");
		}else {
			return MyAjaxResult.fail_300("没有该id的定时任务实例:"+taskId);
		}
		
	}
}



评论区
请写下您的评论...
暂无评论...
猜你喜欢
框架 6331 javaspringboot动态添加或移除任务)工具类importjava.lang.reflect.Field;importjava.lang.reflect.Method
spring/springmvc 2192 "/club.jiajiajia.weblog.util是类所在包路径类@ComponentpublicclassIndexerTask{ publicIndexerTask(){ System.out.pr
official 678 两种方案1.打包的候指配置文件,例如cleaninstall-Ptest2.启动的候指配置文件,例如java-jar-Dspring.profiles.active=testdemo-0.0.1-SNAPSHOT.jar
c++ 969 两种方案1.打包的候指配置文件,例如cleaninstall-Ptest2.启动的候指配置文件,例如java-jar-Dspring.profiles.active=testdemo-0.0.1-SNAPSHOT.jar
java 数据库 2609 java项目-数据库之间进行数据交换服务(右上方下载)压缩包内附sql脚本,本项目为springboot+mybatis框架,导入项目即可启动测试。目的,实现两个数据库自动进行数据同步,
java虚拟机(jvm) 5095 类加载Java类加载(英语:JavaClassloader)是Java运行环境(JavaRuntimeEnvironment)的一部分,负责动态加载Java类到Java虚拟机的内存空间中。类通
java基础 1143 该Calendar所代表的间却不会被立即更改,知道下次调用get(),getTime(),getTimeMillis(),add()或roll()才会重新计算日历的间。这被称为set()方法的延迟
weblog 1076 linux系统vivim编辑查找指内容(关键字)在命令行模式下按'/'键,然后输入你要查找的关键字,回车即可此你可以按n键向下查找,或按N键向上查找
归档
2018-11  12 2018-12  33 2019-01  28 2019-02  28 2019-03  32 2019-04  27 2019-05  33 2019-06  6 2019-07  12 2019-08  12 2019-09  21 2019-10  8 2019-11  15 2019-12  25 2020-01  9 2020-02  5 2020-03  16 2020-04  4 2020-06  1 2020-07  7 2020-08  13 2020-09  9 2020-10  5 2020-12  3 2021-01  1 2021-02  5 2021-03  7 2021-04  4 2021-05  4 2021-06  1 2021-07  7 2021-08  2 2021-09  8 2021-10  9 2021-11  16 2021-12  14 2022-01  7 2022-05  1 2022-08  3 2022-09  2 2022-10  2 2022-12  5 2023-01  3 2023-02  1 2023-03  4 2023-04  2 2023-06  3 2023-07  4 2023-08  1 2023-10  1 2024-02  1 2024-03  1 2024-04  1
标签
算法基础 linux 前端 c++ 数据结构 框架 数据库 计算机基础 储备知识 java基础 ASM 其他 深入理解java虚拟机 nginx git 消息中间件 搜索 maven redis docker dubbo vue 导入导出 软件使用 idea插件 协议 无聊的知识 jenkins springboot mqtt协议 keepalived minio mysql ensp 网络基础 xxl-job rabbitmq haproxy srs 音视频 webrtc javascript
目录
没有一个冬天不可逾越,没有一个春天不会来临。最慢的步伐不是跬步,而是徘徊,最快的脚步不是冲刺,而是坚持。