一、Timer

现在项目中用到需要定时去检查文件是否更新的功能。timer正好用于此处。

用法很简单,new一个timer,然后写一个timertask的子类即可。

package comz.autoupdatefile;  import java.util.Timer;
import java.util.TimerTask;  public class M {  public static void main(String[] args) {  // TODO todo.generated by zoer  Timer timer = new Timer();  timer.schedule(new MyTask(), 1000, 2000);  }
}  class MyTask extends TimerTask {  @Override  public void run() {  System.out.println("dddd");  }  }  

这样,就可以在1秒钟之后开始执行mytask,每2秒钟执行一次。

当然,timer的功能也可以通过自己构造线程,然后在线程中用sleep来模拟停止一段时间,然后再执行某个动作。

其实,看一下timertask的源码就立即可以知道,timertask就是实现了runnable接口的。也就是说,通过timer来间隔一段时间执行一个操作,也是通过一个线程来做到的。

【这样就节省自己写线程的时间啦】

二、Executors

JDK的java.util.concurrent中提供了大量的方法去控制一段代码定时执行,标准的改写上面的代码如下:

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;public class Test6 {public static void main(String[] args) {ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);scheduler.scheduleWithFixedDelay(new Runner(), 1, 2, TimeUnit.SECONDS);}}class Runner implements Runnable {public void run() {System.out.println("yours code");}
}

这样,就可以在1秒钟之后开始执行Runner,每2秒钟执行一次。

scheduler下有很多的方法,达到的目的有:定时执行,执行完后一段时间再次执行;而Executors更有更多控制线程的方法,平时不可忽视。

三、总结

其实不管是用Timer还是使用Executors,都是创建了新的线程。

java定时任务的两种实现方式相关推荐

  1. 后端技术:Java定时任务的五种创建方式

    Quartz表达式生成地址:http://cron.qqe2.com/ 支持生成定时任务表达式和反解析,使用Quartz表达式的定时任务如下 xxl-job springboot 的 @Schedul ...

  2. java动态代理两种实现方式

    代理顾名思义就是代理别人完成某件任务,比如张三代理李四去交物业费.张三就是代理人,李四就是被代理人. Java代理实现,有静态代理和动态代理,静态代理就是代码在编译成class文件后,就已经有代理类的 ...

  3. Java线程的两种实现方式

    前言 线程是程序的一条执行线索,执行路径,是程序使用cpu的最小单位.线程本身不能运行,它只能运行在程序中,线程是依赖于程序存在的. 多线程的意义 其实任何一个程序的执行都需要获得cpu的执行权,是由 ...

  4. java中的uuid是啥,UUID在Java中的两种发作方式

    需求: 集群环境下需要产生uuid,uuid的作用不言而喻 转发请注明出处:http://snv.iteye.com/ 环境: org.safehaus.jug jug 2.0.0 asl 或: or ...

  5. java之Map对象转java对象的两种简单方式

    我们在处理数据的时候,经常用到map对象转java对象,下面我们用代码演示下,希望能够帮助到有这方面需求的老哥. 要转换的java对象: public class Person {private In ...

  6. java如何实现定时任务_Java定时任务的三种实现方式

    前言 现代的应用程序早已不是以前的那些由简单的增删改查拼凑而成的程序了,高复杂性早已是标配,而任务的定时调度与执行也是对程序的基本要求了. 很多业务需求的实现都离不开定时任务,例如,每月一号,移动将清 ...

  7. 初始化一个java空数组_Java 数组的两种初始化方式

    一.数组 1.数组中存储元素的类型是统一的,每一个元素在内存中所占用的空间大小是相同的,知道数组的首元素的内存地址,要查找的元素只要知道下标,就可以快速的计算出偏移量,通过首元素内存地址加上偏移量,就 ...

  8. Java两种排序方式快慢比较

    2019独角兽企业重金招聘Python工程师标准>>> Java中List的排序方式有两种,现在我们测试下这两种排序方式的快慢吧,我们需要用到两个类, 一个是运行程序的Main类,另 ...

  9. java 同步方式 lock_java的两种同步方式, Synchronized与ReentrantLock的区别

    java在编写多线程程序时,为了保证线程安全,需要对数据同步,经常用到两种同步方式就是Synchronized和重入锁ReentrantLock. 相似点: 这两种同步方式有很多相似之处,它们都是加锁 ...

最新文章

  1. gzip压缩算法: gzip 所使用压缩算法的基本原理
  2. 堆和栈组合:双端队列c++
  3. 数据结构:利用栈,将递归转换为非递归的方法
  4. LG P4074 [WC2013] 糖果公园(带修莫队,树上莫队)
  5. mysql回滚部分记录_MySQL事务部分回滚-回滚到指定保存点
  6. 2018-2019-1 20165320 《信息安全系统设计基础》第八周学习总结
  7. C# 多个图片叠加,图片透明.
  8. 0基础学python要多久-27岁0基础自学Python,多久可以找到工作?
  9. Java爬虫爬取微博热搜榜
  10. event mpm php,Apache下三种MPM模式:prefork,worker和event
  11. 洛谷P3354 [IOI2005]Riv 河流 题解
  12. 论文阅读笔记(Region Proposal by Guided Anchoring)
  13. Q-routing发展以及原始实验复现
  14. 重学JS(《JavaScript高级程序设计》笔记) - HTML中的JS
  15. win10下的VMware还原网络设置,无法创建VMware网络适配器解决办法
  16. 源码阅读工具 UnderStand
  17. Vue制作一个日程表
  18. 【小5聊】前端基础之上传图片等文件IE浏览器是会显示两个请求
  19. mySql文字上标_如何在 Pages 里面打出文本上标和下标
  20. Linux 服务器挂载移动硬盘进行数据拷贝

热门文章

  1. MySQL数据库自动添加时间戳
  2. Docker(二)基本操作命令
  3. Flutter 动画组件
  4. 【Alpha】事后分析
  5. Codeforces 864 B Polycarp and Letters 暴力
  6. UDP穿透NAT原理解析
  7. 00-02.PHP 网站假设 之 学习PHP语法 [James建站]
  8. 一个用Shell脚本写的猜丁壳游戏
  9. PHP两个字符串比较(人为出错),两字符串类型和数据表面相等,但strcmp()结果不为0...
  10. 检查DISPLAY设置时Xlib出现No protocol specified错误