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();
            }
        }
        
    }
  • 相关阅读:
    jquery对象中 “冒号” 详解
    vscode自定以vue代码模板
    Vue项目开发环境proxyTable反向代理,生产环境下服务接口地址找不到的解决
    JS函数的节流和防抖
    BFC-块状格式化上下文
    c# 鼠标钩子
    C# 以管理员身份运行WinForm程序
    样式更换
    Revert to this revision 和 Revert changes from this revision 区别
    人工智能几行代码实现换脸
  • 原文地址:https://www.cnblogs.com/lemon-flm/p/8023504.html
Copyright © 2011-2022 走看看