一、使用Thread+sleep的方式

/** * 普通thread * 这是最常见的,创建一个thread,然后让它在while循环里一直运行着, * 通过sleep方法来达到定时任务的效果。这样可以快速简单的实现,代码如下: * @author GT * */
public class Task1 {  public static void main(String[] args) {  // run in a second  final long timeInterval = 1000;  Runnable runnable = new Runnable() {  public void run() {  while (true) {  // ------- code for task to run  System.out.println("Hello !!");  // ------- ends here  try {  Thread.sleep(timeInterval);  } catch (InterruptedException e) {  e.printStackTrace();  }  }  }  };  Thread thread = new Thread(runnable);  thread.start();  }
}  

二、使用TimerTask

import java.util.Timer;
import java.util.TimerTask;  /** *  * 于第一种方式相比,优势 1>当启动和去取消任务时可以控制 2>第一次执行任务时可以指定你想要的delay时间 *  * 在实现时,Timer类可以调度任务,TimerTask则是通过在run()方法里实现具体任务。 Timer实例可以调度多任务,它是线程安全的。 * 当Timer的构造器被调用时,它创建了一个线程,这个线程可以用来调度任务。 下面是代码: *  * @author GT *  */
public class Task2 {  public static void main(String[] args) {  TimerTask task = new TimerTask() {  @Override  public void run() {  // task to run goes here  System.out.println("Hello !!!");  }  };  Timer timer = new Timer();  long delay = 0;  long intevalPeriod = 1 * 1000;  // schedules the task to be run in an interval  timer.scheduleAtFixedRate(task, delay, intevalPeriod);  } // end of main
}  

三、使用ScheduledExecutorService

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;  /** *  *  * ScheduledExecutorService是从Java SE5的java.util.concurrent里,做为并发工具类被引进的,这是最理想的定时任务实现方式。  * 相比于上两个方法,它有以下好处: * 1>相比于Timer的单线程,它是通过线程池的方式来执行任务的  * 2>可以很灵活的去设定第一次执行任务delay时间 * 3>提供了良好的约定,以便设定执行的时间间隔 *  * 下面是实现代码,我们通过ScheduledExecutorService#scheduleAtFixedRate展示这个例子,通过代码里参数的控制,首次执行加了delay时间。 *  *  * @author GT *  */
public class Task3 {  public static void main(String[] args) {  Runnable runnable = new Runnable() {  public void run() {  // task to run goes here  System.out.println("Hello !!");  }  };  ScheduledExecutorService service = Executors  .newSingleThreadScheduledExecutor();  // 第二个参数为首次执行的延时时间,第三个参数为定时执行的间隔时间  service.scheduleAtFixedRate(runnable, 10, 1, TimeUnit.SECONDS);  }
}  

原文链接

转载于:https://www.cnblogs.com/weiyinfu/p/7190906.html

[转]Java实现定时任务的三种方法相关推荐

  1. java解析xml的三种方法

    java解析XML的三种方法 1.SAX事件解析 package com.wzh.sax;import org.xml.sax.Attributes; import org.xml.sax.SAXEx ...

  2. Java 创建线程的三种方法比较

    在学习编程的过程中,我觉得不止要获得课本的知识,更多的是通过学习技术知识提高解决问题的能力,这样我们才能走在最前方,本文主要讲述Java 创建线程的三种方法比较, 更多Java专业知识,广州疯狂jav ...

  3. java 获取时间戳 的三种方法

    java 获取时间戳 的三种方法,效率依次递减 方法一 : System.currentTimeMillis(); 方法二: new Date().getTime(); 方法三: Calendar.g ...

  4. Java 键盘输入的三种方法

    Java 键盘输入的三种方法 1.System.in和System.out方法:从控制台接收一个字符,然后将其打印出来 虽然此方式实现了从键盘获取输入的字符,但是System.out.read()只能 ...

  5. java生成验证码的三种方法

    java生成验证码的三种方法 第一种:导入jar包com.github.axet生成法 ①导包 <dependency><groupId>com.github.axet< ...

  6. 实现java字符串反转的三种方法

    实现java字符串反转的三种方法 1.问题描述:将字符串String="abcdefg"实现反转变成 "gfedcba":用java语言实现. 2.解决方法: ...

  7. java se 定时任务_Java实现定时任务的三种方法

    一.Quartz的特点 按作业类的继承方式来分,主要有以下两种: 作业类继承org.springframework.scheduling.quartz.QuartzJobBean类的方式作业类不继承o ...

  8. Java创建线程的三种方法

    这里不会贴代码,只是将创建线程的三种方法做个笼统的介绍,再根据源码添加上自己的分析. 通过三种方法可以创建java线程: 1.继承Thread类. 2.实现Runnable接口. 3.实现Callab ...

  9. Java字符串分割的三种方法

     一.StringTokenizer方法 Java中substring方法可以分解字符串,返回的是原字符串的一个子字符串.如果要讲一个字符串分解为一个一个的单词或者标记,StringTokeniz ...

最新文章

  1. 【题解】P3052 [USACO12MAR]摩天大楼里的奶牛Cows in a Skyscraper
  2. java服务端的 极光推送
  3. 关于地理信息系统(GIS)的几个问题
  4. 陈艳青(为奥运冠军名字作诗)
  5. 为什么java jvm.dll_Windows下java、javaw、javaws以及jvm.dll等进程的区别
  6. windows--bat--删除当前脚本del %0
  7. python月球地球质量计算_我们如何计算一个行星的质量?
  8. 通过Windows Live Writer发布日志到各大博客
  9. 我的世界php motd,ColorMOTD 彩色字体插件 | 我的世界 | MC世界侠
  10. PCS2021:VVC基于神经网络改进SAO
  11. EasyDarwin —— windows搭建rtsp服务,使用FFmpeg进行rtsp推拉流
  12. 解决CAS 4.2.7 版本集群部署的各种问题
  13. [转]Windows10 中文版 英文语言包安装失败解决
  14. python把工作簿拆分为工作表_使用Python和Pandas将Excel工作表拆分为单独的工作表...
  15. Python自动化运维之1、Python入门
  16. [HDU 5956] The Elder (斜率DP + 可持久化单调队列)
  17. prometheus-预警-6
  18. 笔记本扩展显示器,微信界面显示字体模糊如何解决?
  19. 步进电机控制系统设计
  20. 计算机褐色,脂肪也有“好坏”之分?看颜(yán)值(sè),看分布

热门文章

  1. 快速校对所有文件的md5值
  2. 控制台之console
  3. Python 的PIL,可以解决ImportError The _imagingft C module is not installed
  4. EntityFramework中的DbContext使用疑点说明
  5. 《A Tour of PostgreSQL Internals》学习笔记——进程间通信
  6. Xcode升级后插件失效
  7. asp.net mvc源码分析-Action篇 Action的执行
  8. KVO(NSKeyValueObserving)、KVC(NSKeyValueCoding)作用浅谈
  9. Div Vertical Menu ver2
  10. [转载]Linux Shell 的快捷键