zoukankan      html  css  js  c++  java
  • java监听器、定时器的使用

    1、监听器

    在web.xml配置

       <!--  时间任务   -->
        <listener>
            <listener-class>
                com.hk.common.timer.TimeListener
            </listener-class>
        </listener>

    在java中使用

    package com.hk.common.timer;
    
    import javax.servlet.ServletContext;
    import javax.servlet.ServletContextEvent;
    import javax.servlet.ServletContextListener;
    import com.hk.common.api.APi;
    
    
    /**
     * 目的为了拿到 servletContext
     * 
     * @author flm 
     * 2017年12月11日
     */
    public class TimeListener implements ServletContextListener {
    
        //
        @Override
        public void contextInitialized(ServletContextEvent sce) {
       
            // 要处理的 事件
        
        }
    
        @Override
        public void contextDestroyed(ServletContextEvent arg0) {
            // 对象销毁 时调用
                
        }
    
    }

    2、定时器

    1、在特定时间执行任务,只执行一次  单位(毫秒)

    public void schedule(TimerTask task,Date time)

    2、在特定时间之后执行任务,只执行一次 单位(毫秒)

    public void schedule(TimerTask task,long delay)

    3、指定第一次执行的时间,然后按照间隔时间,重复执行 单位(毫秒)

    public void schedule(TimerTask task,Date firstTime,long period)

    4、在特定延迟之后第一次执行,然后按照间隔时间,重复执行 单位(毫秒)

    public void schedule(TimerTask task,long delay,long period)

    参数:

    delay: 延迟执行的毫秒数,即在delay毫秒之后第一次执行

    period:重复执行的时间间隔

    5、第一次执行之后,特定频率执行,与3同

    public void scheduleAtFixedRate(TimerTask task,Date firstTime,long period)

    6、在delay毫秒之后第一次执行,后按照特定频率执行

    public void scheduleAtFixedRate(TimerTask task,long delay,long period)

    创建一个定时器任务

    package com.hk.common.timer;
    
    import java.util.Timer;
    import javax.annotation.PostConstruct;
    import javax.annotation.Resource;
    import org.springframework.stereotype.Controller;
    import com.hk.user.service.UserService;
    
    /**
     * 定时器
     * @author flm
     * 2017年12月11日
     */
    @Controller
    public class TimerController {
    
        public static final long DELAY_TIME = 500; // 延时 时间执行(毫秒)
        public static final long PERIOD_TIME = 300000; // 每隔 多少毫秒 执行(毫秒)
        
        @Resource private UserService userService;
        
        // 加载完类 加载此方法
        @PostConstruct
        public void init() {
            
            Timer timer = new Timer();
            
            // 启动一个线程 执行任务
            TimerManager task = new TimerManager(userService);
            
            // 安排指定的任务在指定的时间开始进行重复的固定延迟执行。
            timer.schedule(task, DELAY_TIME, PERIOD_TIME);
        }
    }

    创建一个线程 处理数据

    package com.hk.common.timer;
    
    import java.util.TimerTask;
    import javax.servlet.ServletContext;
    import org.apache.log4j.Logger;
    import com.hk.common.api.APi;
    import com.hk.user.service.UserService;
    
    public class TimerManager extends TimerTask {
    
        private static Logger log = Logger.getLogger(TimerTask.class);
    
        private UserService userService;
        public TimerManager(UserService userService) {
            this.userService=userService;
        }
        
        @Override
        public void run() {
            try {
    
                System.out.println(servletContext.getAttribute("处理数据...."));
                
            } catch (Exception e) {
                log.info("# -------------解析信息发生异常--------------");
                e.printStackTrace();
            }
        }
        
    }
  • 相关阅读:
    JavaScript测试工具chai
    gradle初始仓库依赖(含junit)
    汇编和中断
    oracle-12c-ee安装
    pickle
    Python (zip, lambda, map, shallow copy, deepcopy)
    豆瓣源下载tensorflow
    Linux上XRDP可作为WIN的远程连接
    VNC连接远程Linux——废弃电脑作为运算机器
    MACOS 运行Keras报错
  • 原文地址:https://www.cnblogs.com/lemon-flm/p/8023504.html
Copyright © 2011-2022 走看看