由于项目开发的需要,必须实现让一个Java程

序定时运行。比如,我的项目中,有一个网络蜘蛛,需要从互联网上抓取数据,与其配合,有另一个程序来对新抓取的页面进行索引的创建,由于数据源更新频率不

高,我们不可能让蜘蛛无休无止地工作,或者忙等待新数据的产生,那样只能造成浪费,而且非常地不礼貌,所以最理想的情况是,让它每隔一个小时运行一次,这

样一天也就运行不了几次。

那么如何才能实现让一个Java程序定时运行呢?Java基本类库里面,提供了两个工具供我们使用,它们是java.util.Timer和java.util.TimerTask。

Timer是一个对象,这个对象在初始化之初,会创建一个后台进程(TimerThread),同时创建一个任务队列(TaskQueue),然后

后台进程开始检测TaskQueue中是否存在等待调度的任务,如果存在,就运行之,如果不存在,就等待(Object.wait())。

对于程序员可见的类是Timer和TimerTask,TimerTask是一个抽象类,是能够被Timer所调度的一种对象,所有希望定时执行的任务,只要实现TimerTask类即可,然后使用Timer的schedule方法,给定一定的参数,即可实现定时执行,或者周期执行。

schedule方法的本质,是将一个TimerTask对象添加到了TaskQueue中,这个TaskQueue是一个堆(可以动态增长),可以管理很多的Task。

Timer的本质,就是一个线程,按照指定的时间顺序,来顺次执行一个又一个的任务,根据这种性质,我们可以知道,Timer实现的定时不可能准

确,而且,还会收到任务本身耗费时间的干扰。如果前一个任务执行时间过长,超过后一个任务的启动时间,则后一个任务的启动时间必然要顺延。所以,这种方

法,只能用于,任务短小,且对时间精度要求不高的语境。

Timer是线程安全的,可以实现并发访问。

定时执行java程序_如何让Java程序定时运行相关推荐

  1. python 定时执行 爬虫 模块_浅析python实现scrapy定时执行爬虫

    项目需要程序能够放在超算中心定时运行,于是针对scrapy写了一个定时爬虫的程序main.py ,直接放在scrapy的存储代码的目录中就能设定时间定时多次执行. 最简单的方法:直接使用Timer类 ...

  2. java timer定时执行一次_用java.util.Timer定时执行任务

    classWorker extends TimerTask{ publicvoidrun(){     System.out.println("我在工作啦!");   }} Tim ...

  3. java中如何运行小程序_一起学java(一)——运行第一个小程序

    接下来的一段时间内会更新一起学java系列,喜欢的关注一下我吧.微信公众号:什么都不懂的大佬:初学,有错误的地方请大家多多指教. ---------------分割线-------------- 一. ...

  4. 分数统计设计java程序_(windows综合程序)设计一个学生平时成绩统计软件 最后的Java作业...

    1.(windows综合程序)设计一个学生平时成绩统计软件.要求: (1) 录入课程名称(进入系统时录入).学生姓名.学号.成绩.日期(自动生成日期并在界面显示),除第一次外其他次数输入只需要录入学号 ...

  5. cmd编译java命令_使用CMD命令编译和运行Java程序

    对于初学者来说,使用CMD命令(Unix以及类Unix系统采用Termial)来编译和运行Java的好处是让初学者直观地体会到编译(Compile)这一步骤,加深记忆.所谓编译就是将文本文件xxx.j ...

  6. ScheduledThreadPoolExecutor()定时执行线程池详解,java线程池

    为什么80%的码农都做不了架构师?>>>    package com.dy.pool;import java.util.concurrent.ExecutorService; im ...

  7. opencv java 摄像头_使用OpenCV Java创建Windows摄像头扫码程序

    OpenCV提供了一些基本的Webcam控制接口.用OpenCV C/C++或者Python,可以在任意平台快速创建一个摄像头预览应用.然而使用Java,情况就复杂的多,因为OpenCV Java并没 ...

  8. JAVA拳皇_拳皇(Java简单的小程序)代码实例|chu

    刚开始学习Java,看完老九君的视频根据他的内容敲的代码,感觉还挺有成就感的,毕竟刚学习Java. package helloasd;import java.util.*; public class ...

  9. java web应用程序_如何构建Java Web 应用程序 - Spring Boot?

    Spring Framework 是可以帮助 Java 开发人员创建企业级应用程序的开源解决方案.构建在该平台基础之上的较热门项目之一是 Spring Boot,它提供一种简化的方法来创建独立的 Ja ...

最新文章

  1. 一文详析微信和淘宝扫码登录背后的实现原理!
  2. 如何使用Hololens 这些手势你都要学
  3. Spring-属性文件自身的引用03
  4. JavaScript 实现 GriwView 单列全选
  5. dynamic 365 js 失去焦点_基于Auto.js的QQ好友动态秒赞系统
  6. 零基础 Amazon Web Services (AWS) 入门教程图文版(三)
  7. quartz SpringMvc 动态定时任务(quartz2.2)
  8. hive学习4(hive的脚本执行)
  9. 注册不到zipkin服务_Spring Cloud微服务之 sleuth+zipkin日志聚合
  10. flask综合整理2
  11. 09_用户登录退出实现
  12. 发动机压缩比怎么计算公式_发动机要多大的压缩比热效率才能达到达到60%?
  13. Cesium开发环境搭建的几种方法总结
  14. 一段比较巧妙的sql
  15. 日本python程序员工资_年轻程序员赴日本工作有前途吗?
  16. creator多点触摸理解
  17. uplink Tx switching for ENDC/CA
  18. python机器人编程前景_机器人编程挑战python
  19. [cogs2482][二分答案]Franky的胡子
  20. IIIT5K数据提取预处理

热门文章

  1. Wi-Fi 6到底有什么特别?
  2. 靓仔落泪,性能问题定位难倒我了
  3. 华为面试改革,我们该怎么跟进?
  4. mac mysql 链接_mac上搭建mysql环境配置和Navicat连接mysql
  5. mysql远程备份工具_innobackupex实现MySQL远程备份
  6. python连接ftp服务器获取文件内容_python 访问ftp服务器文件
  7. apache日志导入mysql,将Apache访问日志记录到Mysql数据库中
  8. mysql批量插入 增加参数_MySql 的批量操作,要加rewriteBatchedStatements参数
  9. docker Gitlab14.5.0 初始化账号以及密码是什么呢?
  10. SFTP多用户权限 linux环境 一站式解决方案