zoukankan      html  css  js  c++  java
  • java定时器

    钩子程序 
    Runtime.getRuntime(). 
    (shutdownHook); 
    这个方法的含义说明: 
    这个方法的意思就是在jvm中增加一个关闭的钩子,当jvm关闭的时候,会执行系统中已经设置的所有通过方法addShutdownHook添加的钩子,当系统执行完这些钩子后,jvm才会关闭。所以这些钩子可以在jvm关闭的时候进行内存清理、对象销毁等操作。

    一、编写个测试类 
    package com.test.hook; 
    public class TestShutdownHook { 
    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
    // 定义线程1 
    Thread thread1 = new Thread() { 
    public void run() { 
    System.out.println(“thread1…”); 

    }; 
    // 定义线程2 
    Thread thread2 = new Thread() { 
    public void run() { 
    System.out.println(“thread2…”); 

    }; 
    // 定义关闭线程 
    Thread shutdownThread = new Thread() { 
    public void run() { 
    System.out.println(“shutdownThread…”); 

    }; 
    // jvm关闭的时候先执行该线程钩子 
    Runtime.getRuntime().addShutdownHook(shutdownThread); 
    thread1.start(); 
    thread2.start(); 

    }

    打印结果: 
    thread2… 
    thread1… 
    shutdownThread…

    或者: 
    thread2… 
    thread1… 
    shutdownThread…

    结论:

    无论是先打印thread1还是thread2,shutdownThread 线程都是最后执行的(因为这个线程是在jvm执行关闭前才会执行)。


    @Scheduled(cron = “${update.services.status.cron}”)

    @Scheduled 在spring 3.1 以后才支持,参数分别是(秒 分 时 天 月 年) 
    并且支持表达式 update.services.status.cron为在表达式中配置的参数 。

    0/5 * * * * ? 每5秒执行一次

    0 0 10,14,16 * * ? 每天上午10点,下午2点,4点 
    0 0/30 9-17 * * ? 朝九晚五工作时间内每半小时 
    0 0 12 ? * WED 表示每个星期三中午12点 
    “0012**?”每天中午12点触发 
    “01510?**”每天上午10:15触发 
    “01510**?”每天上午10:15触发 
    “01510**?*”每天上午10:15触发 
    “01510**?2005”2005年的每天上午10:15触发 
    “0*14**?”在每天下午2点到下午2:59期间的每1分钟触发 
    “00/514**?”在每天下午2点到下午2:55期间的每5分钟触发 
    “00/514,18**?”在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发 
    “00-514**?”在每天下午2点到下午2:05期间的每1分钟触发 
    “010,4414?3WED”每年三月的星期三的下午2:10和2:44触发 
    “01510?*MON-FRI”周一至周五的上午10:15触发 
    “0151015*?”每月15日上午10:15触发 
    “01510L*?”每月最后一日的上午10:15触发 
    “01510?*6L”每月的最后一个星期五上午10:15触发 
    “01510?*6L2002-2005”2002年至2005年的每月的最后一个星期五上午10:15触发 
    “01510?*6#3”每月的第三个星期五上午10:15触发

    关于@Scheduled 使用需要配置两个地方: 
    1,方法上边加@Scheduled 标签和参数 
    2。启动的Application 上要添加@EnableScheduling 标签

    代码示例:

     public Object getList(Map<String, Object> map) {
            printName();
            return userDao.getList(map);
        }
    
        //每一秒调用一次  -- 用于测试
        @Scheduled(cron = "0/1 * *  * * ?")
        public  void printName() {
            System.out.println("my name is yang ");
        }
    
    @ComponentScan(basePackages ="com.us.example")
    @SpringBootApplication
    @EnableScheduling
    public class Application {
        public static void main(String[] args) {
            ConfigurableApplicationContext run = run(Application.class, args);
        }
    
    }


    来源:http://blog.csdn.net/u012373815/article/details/52154296
  • 相关阅读:
    Python __repr__()方法:显示属性
    Python SQLAlchemy入门教程(基本用法)
    彻底搞懂Token、Session和Cookie。
    MTV和MVC的区别
    Flask配置Cors跨域
    跨域资源共享 CORS 详解
    浏览器同源政策及其规避方法
    敏捷开发
    Nginx搭建正向代理服务器支持https
    为什么使用k8s和容器作为devops的底层平台
  • 原文地址:https://www.cnblogs.com/kongxc/p/7417182.html
Copyright © 2011-2022 走看看